SapphireDensetsu / ypsilon

Automatically exported from code.google.com/p/ypsilon
Other
0 stars 0 forks source link

port-eof? not reliable for client sockets #142

Open GoogleCodeExporter opened 8 years ago

GoogleCodeExporter commented 8 years ago
From the description of port-eof? in R6RS it seems like port-eof? should not 
return #f when lookahead-u8 will return the end of file object. So this program 
should not print its message, but it does:

Ypsilon 0.9.6-trunk/r503 Copyright (c) 2009 Y.Fujita, LittleWing Company 
Limited.
> (import (socket))
> (let ((p (socket-port (make-client-socket "www.example.com" "80"))))
  (put-bytevector p
                  (string->utf8
                   (string-append "GET / HTTP/1.1\r\n"
                                  "Host: www.example.com:80"
                                  "Connection: close\r\n"
                                  "\r\n\r\n")))
  (flush-output-port p)
  (let lp ()
    (unless (port-eof? p)
      (cond ((eof-object? (lookahead-u8 p))
             (display "end of file returned even though port-eof? was false.\n"))
            (else
             (get-u8 p)
             (lp)))))
  (close-port p))
end of file returned even though port-eof? was false.
> 

Original issue reported on code.google.com by weinh...@gmail.com on 22 Jul 2010 at 6:50