[Date Prev][Date Next]
[Chronological]
[Thread]
[Top]
Re: signal() behavior
Howard Chu wrote:
>
> > From: Kurt D. Zeilenga [mailto:Kurt@OpenLDAP.Org]
>
> > Seems to me that we can do away with this whole socket pair business if we
> > just close all the listeners on shutdown (as is done when -DHAVE_WINSOCK)
> > is defined...
>
> I tried something like that - closing a "read" descriptor doesn't seem to
> have any effect on the select() call though - it still just waits. The pipe
> trick worked by closing the write side of the pipe, which caused an EOF
> condition on the read side of the pipe. Just closing the read side had no
> effect. Perhaps using shutdown() to close down the connections would work, I
> didn't try that. But basically, in order to cause the select() to terminate,
> data or an EOF must be generated by the remote side of a connection.
> >
> > Also:
> >
> > #define sock_errstr() STRERROR(errno)
> >
> > is bogus!
> >
> > errno may change from the time it was saved in the local variable and
> > the time it is printed. Hence, sock_errstr must be written to expect
> > the local variable.
> >
> > err = sock_errno();
> > ...
> > printf("error e=%d s=%s\n", err, sock_errstr(err));
>
> I know, that's pretty much how I wrote it the first time, but Hallvard
> objected because the Winsock implementation WSAGetLastErrorString() doesn't
> accept an argument, so the macro is misleading there. This bit of semantic
> difference is tough to accomodate reasonably in all cases.
#define sock_errstr(err) WSAGetErrorString(err)
Note, WSAGetErrorString and WSAGetLastErrorString are NOT WSA routines.
They are -llutil/nt_err.c routines.
Kurt