sometimes this reader is stuck until another thread hits thread-wait-for-i/o again pasted by C-Keen on Sun Jul 17 16:21:50 2011

(define reader
  (make-thread
   (lambda ()
       (let loop ()
         (thread-wait-for-i/o! (port->fileno i))
	 (while (and (char-ready? i) (not (eof-object? (peek-char i))))
		(printf "~a" (read-char i))
		(flush-output))
	 (loop)))))

full example added by C-Keen on Sun Jul 17 17:40:04 2011

(use parley miscmacros srfi-18 tcp)


(define-values (i o) (tcp-connect "ifmud.port4000.com" 4000))

(define reader
  (make-thread
   (lambda ()
       (let loop ()
         (thread-wait-for-i/o! (port->fileno i))
	 (while (and (char-ready? i) (not (eof-object? (peek-char i))))
		(printf "~a" (read-char i))
		(flush-output))
	 (loop)))))

(thread-start! reader)

(let loop ()
  (let ((c (parley "")))
    (fprintf o "~a~%" c)
    (flush-output o)
    (if (equal? c "quit")
        (begin
          (close-input-port i)
          (close-output-port o)
          (exit 0))
	(loop))))