about summary refs log tree commit diff stats
path: root/092socket.mu
diff options
context:
space:
mode:
Diffstat (limited to '092socket.mu')
-rw-r--r--092socket.mu17
1 files changed, 16 insertions, 1 deletions
diff --git a/092socket.mu b/092socket.mu
index 9fa4e415..eacc501f 100644
--- a/092socket.mu
+++ b/092socket.mu
@@ -16,10 +16,13 @@ F - example-server-test: $open-server-socket failed]
   ]
   source:&:source:char <- start-reading-from-network 0/real-resources, [localhost/], port
   response:text <- drain source
+#?   $print [app: done draining], 10/newline
   10:@:char/raw <- copy *response
   memory-should-contain [
     10:array:character <- [abc]
   ]
+#?   $print [app: closing server socket], 10/newline
+  $close-socket socket
 ]
 # helper just for this scenario
 def example-handler query:text -> response:text [
@@ -62,6 +65,7 @@ F - example-server-test: $accept failed]
   query:text <- drain contents
   response:text <- call request-handler, query
   write-to-socket session, response
+#?   $print [app: closing session socket], 10/newline
   $close-socket session
 ]
 
@@ -86,7 +90,7 @@ def start-reading-from-network resources:&:resources, uri:text -> contents:&:sou
   req:text <- interpolate [GET _ HTTP/1.1], path
   request-socket socket, req
   contents:&:source:char, sink:&:sink:char <- new-channel 10000
-  start-running receive-from-socket socket, sink
+  start-running receive-from-client-socket-and-close socket, sink
 ]
 
 def request-socket socket:num, s:text -> socket:num [
@@ -118,6 +122,7 @@ def receive-from-socket socket:num, sink:&:sink:char -> sink:&:sink:char [
       done?:bool <- greater-or-equal i, bytes-read
       break-if done?
       c:char <- index *req, i  # todo: unicode
+#?       $print [read ], c, 10/newline
       sink <- write sink, c
       i <- add i, 1
       loop
@@ -125,6 +130,15 @@ def receive-from-socket socket:num, sink:&:sink:char -> sink:&:sink:char [
     loop-unless eof?
   }
   sink <- close sink
+#?   $print [read status: ] found? [ ] eof? [ ] error 10/newline
+]
+
+def receive-from-client-socket-and-close socket:num, sink:&:sink:char -> sink:&:sink:char [
+  local-scope
+  load-ingredients
+  sink <- receive-from-socket socket, sink
+#?   $print [app: closing socket after reading], 10/newline
+  $close-socket socket
 ]
 
 def write-to-socket socket:num, s:text [
@@ -135,6 +149,7 @@ def write-to-socket socket:num, s:text [
   {
     done?:bool <- greater-or-equal i, len
     break-if done?
+#?     $print i, 10/newline
     c:char <- index *s, i
     $write-to-socket socket, c
     i <- add i, 1