Oh dear, some things are surprisingly enough impossible to do in standard Unix API:s: the *only* way to know if there's EOF is to actually do a read of > 0 bytes.

(> 0 because 0 is the return value that signals EOF, eh.)

select() on a closed socket instantaneously returns read-ability so this must be the basis for port-wait-for-input's behavior, which is really fine of course.

That Unix API was clearly not made with even quite basic application-level abstraction of socket access in mind.

Very well, I suppose you always learn something new every day.

Thanks,
Mikael

Dear Marc,

How do I know if a device port reached EOF?

Is there a flag internally in Gambit somewhere I suppose there is a flag internally somewhere in Gambit that keeps track of this. |wait-for-input| just returns immediately. Of course I could do something like (read-subu8vector v 0 1 port 0) though in this particular application I'd much prefer to only do the socket reading and writing completely outside the scope of Gambit's IO system.

If it's not in Gambit then please just say so, there's always another implementation path, though I'd appreciate not to go into higher complexity than needed.

Thanks!


(define (port-wait-for-input port)
  (##wait-for-io!
   (device-port-rdevice-condvar port)
   (port-rtimeout port)))