Working TCP echo server and client.

Required a few changes to APIs, namely janet_root_fiber()
to get topmost fiber that is active in the current scheduler.
This is distinct from janet_current_fiber(), which gets the bottom
most fiber in the fiber stack - it might have a parent, and so cannot
be reliably resumed.
This is the kind of situation that makes symmetric coroutines more
attractive.
This commit is contained in:
Calvin Rose
2020-02-09 20:00:50 -06:00
parent 7f1f684b21
commit f4d7fd97f6
11 changed files with 341 additions and 92 deletions
+7
View File
@@ -0,0 +1,7 @@
(def conn (net/connect "127.0.0.1" "8000"))
(printf "Connected to %q!" conn)
(net/write conn "Echo...")
(print "Wrote to connection...")
(def res (net/read conn 1024))
(pp res)
(net/close conn)
+13
View File
@@ -0,0 +1,13 @@
(defn handler
"Simple handler for connections."
[stream]
(def id (gensym))
(def b @"")
(print "Connection " id "!")
(while (net/read stream 1024 b)
(net/write stream b)
(buffer/clear b))
(printf "Done %v!" id)
(net/close stream))
(net/server "127.0.0.1" "8000" handler)