diff --git a/tcp-api/non-os2-3.rkt b/tcp-api/non-os2-3.rkt index 44da843..182f886 100644 --- a/tcp-api/non-os2-3.rkt +++ b/tcp-api/non-os2-3.rkt @@ -7,7 +7,7 @@ (thread (connection-handler cin cout)) (loop))) -(define (connection-handler cin cout) +(define ((connection-handler cin cout)) (let connection-loop () (define v (read-byte cin)) (unless (or (eof-object? v) (equal? v #"\4")) diff --git a/tcp-api/os2-tcp-test-echo-service-2.rkt b/tcp-api/os2-tcp-test-echo-service-2.rkt index 70d6723..45c62eb 100644 --- a/tcp-api/os2-tcp-test-echo-service-2.rkt +++ b/tcp-api/os2-tcp-test-echo-service-2.rkt @@ -13,9 +13,9 @@ (role/act in-topic [(tcp-channel _ _ (or (== #"\4") (? eof-object?))) (kill)] - [(tcp-channel _ _ (? bytes? line)) + [(tcp-channel _ _ (? bytes? bytev)) (list (cin (tcp-credit 1) #:mode 'feedback) - (cout line))]))) + (cout bytev))]))) (define (main port) (ground-vm @@ -25,6 +25,24 @@ (main 5999) +(define (tcp-accept topic) + (match-define (topic (tcp-channel remote-addr local-addr _)) topic) + (values (match-lambda + [(val #:mode 'feedback) + (send-feedback (tcp-channel remote-addr local-addr val))]) + (match-lambda + [(val) + (send-message (tcp-channel local-addr remote-addr val))]) + (topic-subscriber (tcp-channel remote-addr local-addr (wild))) + (topic-publisher (tcp-channel local-addr remote-addr (wild))))) + + +(define (tcp-listener port) + (topic-subscriber (tcp-channel (wild) + (tcp-local-endpoint port) + (wild)) + #:monitor? #t)) + (require racket/string) (require racket/set) (require racket/match)