;; Simple R7RS echo server, using (srfi 18) threads and the
;; run-net-server utility from (chibi net server).

(import (scheme base) (scheme write) (srfi 18) (chibi net server))

;; Copy each input line to output.
(define (echo-handler in out sock addr)
  (let ((line (read-line in)))
    (cond
     ((not (or (eof-object? line) (equal? line "")))
      (display "read: ") (write line) (newline)
      (display line out)
      (newline out)
      (flush-output-port out)
      (thread-yield!)
      (echo-handler in out sock addr)))))

;; Start the server on localhost:5556 dispatching clients to echo-handler.
(run-net-server 5556 echo-handler)