(use packedobjects tcp posix) (define MAX-PDU-SIZE 5000) (define-values (NUM MIN MAX) (values 100 -1000000 1000000)) (define protocol '(random choice (query sequence (num integer (range 1 10000)) (min integer (range -1000000000 1000000000)) (max integer (range -1000000000 1000000000))) (response sequence-of (n integer (range -1000000000 1000000000))))) (define data (packedobjects protocol pdusize: MAX-PDU-SIZE)) (define-values (i o) (tcp-connect "localhost" 4242)) (define fdin (port->fileno i)) (define fdout (port->fileno o)) (define pdu `(random (query (num ,NUM) (min ,MIN) (max ,MAX)))) (data 'write-message fdout (data 'pack pdu)) (define (decode-response t) (map (lambda (n) (cadar n)) (cdadr t))) (let wait-for-data () (unless (file-select fdin #f 0) (wait-for-data))) (unless (> (data 'read-message fdin) 0) (error "connection lost!")) (print (decode-response (data 'unpack))) (data 'free) (close-input-port i) (close-output-port o)