aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDrahflow <drahflow@gmx.de>2015-07-21 01:14:01 +0200
committerDrahflow <drahflow@gmx.de>2015-07-21 01:14:01 +0200
commit31082b0c3b95d55d71070d1596f0c005ec034313 (patch)
tree8c430f274a9baa420d43f91e41e4b7051f38adf2
parentee5c6279156a57526671590def0e349cca1db128 (diff)
Handle dying connections better
-rw-r--r--elymas/lib/net/alg/server.ey44
1 files 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