#lang racket (require racket/tcp) (define outs '()) (define (write-all data out) (for-each (lambda (o) (cond [(not (eq? o out)) (displayln data o)])) outs)) (define (worker in out) (define (loop msg) (if (equal? msg eof) (begin (close-input-port in) (close-output-port out) (set! outs (remove out outs))) (let ([data (read-line in)]) (displayln data) (write-all (string-append ">>> " data) out) (loop data)))) (loop 'y)) (define (listener sock) (define-values (in-conn out-conn) (tcp-accept sock)) (file-stream-buffer-mode in-conn 'none) (file-stream-buffer-mode out-conn 'none) (thread (lambda () (worker in-conn out-conn))) (set! outs (cons out-conn outs)) (writeln (length outs)) (listener sock)) (define sock (tcp-listen 1678 4 #t)) (listener sock) (tcp-close sock)