racket/collects/tests/mzscheme/benchmarks/shootout/echo.ss
2008-02-24 21:27:36 +00:00

46 lines
1.2 KiB
Scheme

(module echo mzscheme
(define PORT 8888)
(define DATA "Hello there sailor\n")
(define n 10)
(define (server)
(thread client)
(let-values ([(in out) (tcp-accept (tcp-listen PORT 5 #t))]
[(buffer) (make-string (string-length DATA))])
(file-stream-buffer-mode out 'none)
(let loop ([i (read-string! buffer in)]
[bytes 0])
(if (not (eof-object? i))
(begin
(display buffer out)
(loop (read-string! buffer in)
(+ bytes (string-length buffer))))
(begin
(display "server processed ")
(display bytes)
(display " bytes\n"))))))
(define (client)
(let-values ([(in out) (tcp-connect "127.0.0.1" PORT)]
[(buffer) (make-string (string-length DATA))])
(file-stream-buffer-mode out 'none)
(let loop ([n n])
(if (> n 0)
(begin
(display DATA out)
(let ([i (read-string! buffer in)])
(begin
(if (equal? DATA buffer)
(loop (- n 1))
'error))))
(close-output-port out)))))
(define (main args)
(set! n
(if (= (vector-length args) 0)
1
(string->number (vector-ref args 0))))
(server))
(main (current-command-line-arguments)))