From 2623c820db36a58007c77e9e011f5d89f5821438 Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Sat, 8 Oct 2016 10:14:14 -0700 Subject: 3479 --- server-socket.mu | 72 -------------------------------------------------------- 1 file changed, 72 deletions(-) delete mode 100644 server-socket.mu (limited to 'server-socket.mu') diff --git a/server-socket.mu b/server-socket.mu deleted file mode 100644 index 8a67b6e6..00000000 --- a/server-socket.mu +++ /dev/null @@ -1,72 +0,0 @@ -# example program: a single-request HTTP server -# listen for connections from clients on a server socket -# when a connection occurs, transfer it to a session socket -# read from it using channels -# write to it directly -# -# After running it, navigate to localhost:8080. Your browser should display -# "SUCCESS!" and the server will terminate after one connection. - -def main [ - local-scope - socket:num <- $open-server-socket 8080/port - $print [Mu socket creation returned ], socket, 10/newline - return-unless socket - session:num <- $accept socket - contents:&:source:char, sink:&:sink:char <- new-channel 30 - sink <- start-running transmit-from-socket session, sink - buf:&:buffer <- new-buffer 30 - { - c:char, done?:bool, contents <- read contents - break-if done? - buf <- append buf, c - loop - } - socket-text:text <- buffer-to-array buf - $print [Done reading from socket.], 10/newline - write-to-socket session, [HTTP/1.0 200 OK -Content-type: text/plain - -SUCCESS! -], contents - $print 10/newline, [Wrote to and closing socket...], 10/newline - $close-socket session - $close-socket socket -] - -def write-to-socket session-socket:num, s:text, source:&:source:char [ - local-scope - load-ingredients - len:num <- length *s - i:num <- copy 0 - { - done?:bool <- greater-or-equal i, len - break-if done? - c:char <- index *s, i - $print [writing to socket: ], i, [ ], c, 10/newline - $write-to-socket session-socket, c - i <- add i, 1 - loop - } -] - -def transmit-from-socket session:num, sink:&:sink:char -> sink:&:sink:char [ - local-scope - load-ingredients - { - req:text, bytes-read:num <- $read-from-socket session, 4096/bytes - $print [read ], bytes-read, [ bytes from socket], 10/newline - i:num <- copy 0 - { - done?:bool <- greater-or-equal i, bytes-read - break-if done? - c:char <- index *req, i - end-of-request?:bool <- equal c, 10/newline - break-if end-of-request? # To be safe, for now. - sink <- write sink, c - i <- add i, 1 - loop - } - } - sink <- close sink -] -- cgit 1.4.1-2-gfad0