(module vandusen-remote () (import chicken scheme) (require-library regex) (import irregex) (use extras srfi-13 vandusen tcp srfi-18 ports) (plugin 'remote (lambda () (let ((listener (tcp-listen ($ 'remote-port) (or ($ 'remote-backlog) 10) (or ($ 'remote-host) "localhost")))) (add-finalizer (lambda () (debug "finalizing remote listener") (tcp-close listener))) (thread-start! (lambda () (parameterize ((tcp-accept-timeout 10000) (tcp-read-timeout 3000)) (let loop () (condition-case (receive (in out) (tcp-accept listener) (thread-start! (lambda () (dynamic-wind void (lambda () (let ((line (read-line in))) (and-let* ((match (irregex-match '(seq (submatch (+ (~ space))) " " (submatch (+ any))) line))) (say (string-trim (irregex-match-substring match 2)) (irregex-match-substring match 1))))) (lambda () (close-input-port in) (close-output-port out))))) (loop)) (e (exn i/o net timeout) (print "tcp-accept timed out") (loop)))))))))) )