ikarus/lab/tcp-pingpong.ss

32 lines
828 B
Scheme
Executable File

#!/usr/bin/env scheme-script
(import (ikarus))
(define max-bytes 100000000)
(define devrand (open-file-input-port "/dev/urandom"))
(define (rand-length)
(add1 (mod
(bytevector-u16-ref (get-bytevector-n devrand 2) 0 'little)
1024)))
(define (echo host)
(printf "Connecting\n")
(let-values ([(ip op) (tcp-connect host "echo")])
(printf "Connected\n")
(let f ([bytes 0])
(printf "~s " bytes)
(when (<= bytes max-bytes)
(let ([n (rand-length)])
(let ([bv (get-bytevector-n devrand n)])
(put-bytevector op bv)
(flush-output-port op)
(let ([v (get-bytevector-n ip n)])
(assert (equal? v bv)))
(f (+ bytes n))))))
(close-input-port ip)
(close-output-port op)
(newline)))
(echo "localhost")