about summary refs log tree commit diff stats
path: root/server-socket.mu
diff options
context:
space:
mode:
authorStephen Malina <stephenmalina@gmail.com>2016-09-18 05:05:19 -0700
committerStephen Malina <stephenmalina@gmail.com>2016-09-18 05:10:24 -0700
commit51ae6e61e2d14354e66b95cc028b8d1ebddfdc74 (patch)
treeab942d86a5b4967188c3ef44da6f7a30357a41a8 /server-socket.mu
parentb28aae5740d3bd4fb4e33dd568c7eba6d4f6e7f8 (diff)
downloadmu-51ae6e61e2d14354e66b95cc028b8d1ebddfdc74.tar.gz
3399 - Update network primitives.
$write-to-socket, $read-from-socket, and $accept now pass around
references to socket pointers.

$read-from-socket handles EOF explicitly.
Diffstat (limited to 'server-socket.mu')
-rw-r--r--server-socket.mu24
1 files changed, 21 insertions, 3 deletions
diff --git a/server-socket.mu b/server-socket.mu
index d7be418e..dbdf1ef7 100644
--- a/server-socket.mu
+++ b/server-socket.mu
@@ -3,12 +3,30 @@ def main [
   socket:num <- $socket 8080/port
   $print [Mu socket creation returned ], socket, 10/newline
   session:num <- $accept socket
+  write-to-socket session, [HTTP/1.0 200 OK
+
+OK]
   {
-    client-message:&:buffer <- new-buffer 1024
-    c:char <- $read-from-socket session
-    break-unless c
+    c:char, eof?:boolean <- $read-from-socket session
     $print c
+    break-if eof?
     loop
   }
+  $print 10/newline, [Hit end of socket, closing...], 10/newline
   $close-socket socket, session
 ]
+
+def write-to-socket session-socket:number, s:address:array:character [
+  local-scope
+  load-ingredients
+  len:number <- length *s
+  i:number <- copy 0
+  {
+    done?:boolean <- greater-or-equal i, len
+    break-if done?
+    c:character <- index *s, i
+    $write-to-socket session-socket, c
+    i <- add i, 1
+    loop
+  }
+]