aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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