From 31082b0c3b95d55d71070d1596f0c005ec034313 Mon Sep 17 00:00:00 2001 From: Drahflow Date: Tue, 21 Jul 2015 01:14:01 +0200 Subject: Handle dying connections better --- elymas/lib/net/alg/server.ey | 44 ++++++++++++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/elymas/lib/net/alg/server.ey b/elymas/lib/net/alg/server.ey index 882b46f..6dd8d8f 100644 --- a/elymas/lib/net/alg/server.ey +++ b/elymas/lib/net/alg/server.ey @@ -46,29 +46,45 @@ noHandler ==eventHandler ++EPOLLIN ++EPOLLERR bor ==initialFlags + 0 ==closed < { - epoll ++EPOLLCTLDEL fd 0 0 ++ctl +??io.net.epoll -- - fd +close +??io.net.close -- - fd unprotectGC + closed not { + epoll ++EPOLLCTLDEL fd 0 0 ++ctl +??io.net.epoll -- + fd +close +??io.net.close -- + fd unprotectGC + 1 =closed + } rep } /close deffst { ==count - count str .alloc ==buf - fd buf count +read - |close < { 0 } ; =*close > +???io.net.con.read - buf str .inplacePrefix + /read_start dump + closed { "" } { + count str .alloc ==buf + fd buf count +read + |close < { 0 } ; =*close > +???io.net.con.read + buf str .inplacePrefix + } ? * + /read_end dump } /read deff { ==buf - fd buf _ len +write - |close < =*close > +???io.net.con.write + /write_start dump + closed { buf len } { + fd buf _ len +write + |close < =*close > +???io.net.con.write + } ? * + /write_end dump } /write deff { ==flags - eventHandler +!rawAddress noHandler +!rawAddress eq { - flags =initialFlags - } { - epoll ++EPOLLCTLMOD fd flags eventHandler +!rawAddress ++ctl +??io.net.epoll -- - } ? * + /ctl_start dump + closed not { + eventHandler +!rawAddress noHandler +!rawAddress eq { + flags =initialFlags + } { + epoll ++EPOLLCTLMOD fd flags eventHandler +!rawAddress ++ctl +??io.net.epoll -- + } ? * + } rep + /ctl_end dump } /ctl deffst > ::accept =eventHandler -- cgit v1.2.3