echo server マルチプロセス版
Mosh プロセスの実体は shared nothing VM thread。実体はグリーンスレッドとかでも良い気がする。
(import (rnrs) (mosh) (mosh concurrent) (mosh socket)) (let ([server (make-server-socket "4649")]) (display "Echo server: START\n") (let loop ([conn (socket-accept server)]) (let ([pid (spawn (lambda () (display "child start\n") (receive [('connection conn) (let loop ([data (socket-recv conn 100)]) (cond [(zero? (bytevector-length data)) (socket-close conn) (display "Echo server: STOP\n")] [else (format #t "received ~s\n" (utf8->string data)) (socket-send conn data 0) (loop (socket-recv conn 100))]))])) '((rnrs) (mosh concurrent) (mosh) (mosh socket)))]) (! pid `(connection ,conn))) (loop (socket-accept server))) (socket-close server))