On Sun, May 31, 2020 at
7:10 AM Paul Ruizendaal <
pnr@planet.nl>
wrote:
This behaviour seems
to have continued into SysVR1, I’m not sure when EAGAIN
came into use as a return value for this use case in the
SysV lineage. Maybe with SysVR3 networking?
Actually,
I'm pretty sure that was a product of the POSIX
discussions. BSD already had networking an
EWOULDBLOCK. We had argued about EWOULDBLOCK a great
deal, we also were arguing about signal semantics.
I've forgotten many of the details, Heinz may remember
more than I do. EAGAIN was created as a compromise --
IIRC neither system had it yet. SVR3 networking was
where it went into System V, although some of the
AT&T representatives were none too happy about it.
In the Research lineage, the above SysIII approach does
not seem to exist, although the V8 manual page for
open() says under BUGS "It should be possible [...] to
optionally call open without the possibility of hanging
waiting for carrier on communication lines.” In the same
location for V10 it reads "It should be possible to call
open without waiting for carrier on communication
lines.”
The July 1981 design proposals for 4.2BSD note that
SysIII non-blocking files are a useful feature and
should be included in the new system. In Jan/Feb 1982
this appears to be coded up, although not all affected
files are under SCCS tracking at that point in time.
Non-blocking behaviour is changed from the SysIII
semantics, in that EWOULDBLOCK is returned instead of 0
when progress is not possible. The non-blocking
behaviour is extended beyond TTY’s and pipes to sockets,
with additional errors (such as EINPROGRESS). At this
time EWOULDBLOCK is not the same error number as EGAIN.
My
memory is that Keith was the BSD (CSRG) person at the
POSIX meeting (he, Jim McGinness of DEC, and I created
PAX at one point as a compromise). I wish I could
remember all of the details, but this was all argued
at the POSIX meetings.
As I
said before the folks from AT&T just wanted to
take the SVID and rubber stamp it at the
specification. Part of it the problem was they wanted
to be free to do what things/make choices that the
rest of us might or might not like (for instance, they
did not want the sockets interface).
It would seem that the differences between the BSD and
SysV lineages in this area persisted until around 2000
or so.
Yep -
cause around then POSIX started to settle out and both
systems began to follow it.