[gambit-list] Something like ##device-port-eof? available?

Hendrik Boom hendrik at topoi.pooq.com
Tue Nov 20 09:06:00 EST 2012


On Tue, Nov 20, 2012 at 03:38:02AM +0200, Mikael wrote:
> 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.

Which may well have been the way sequential hardware worked way back in 
the 70's.

This is one of the few new things that Pascal got right -- that you 
should ask whether eof is false before you read.  On recalcitrant OSes 
(most of them) this had to be implemented by reading into a buffer for 
the eof test, which led to confusing interactive behaviour of 
straightforward-looking programs.

eof had an unobvious side effect.
 
> 
> (> 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.

There was a serious attempt to define the 'software bus', a serious 
attempt to design a logically organised interface to the OS.  It was 
pushed by the Japanese through the ISO standadisation process, but 
failed against determined U.S.A. opposition.  They wanted the UNIX 
interface to be the standard,m and, ultimately, POSIX was the result.

-- hendrik
 
> 
> 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.

That flag was there in Pascal.  But, as I've mentioned, its effective 
use is sabotaged by most OS designs.

-- hendrik




More information about the Gambit-list mailing list