David Ford <david@blue-labs.org> writes:
> Please wait a day before applying the patch, I want to make it a bit
> more clean/readable and make sure I covered everything in fe-connect.c,
BTW, reading the HPUX man page for connect I find the following relevant
error codes:
[EALREADY] Nonblocking I/O is enabled with O_NONBLOCK,
O_NDELAY,or FIOSNBIO, and a previous connection attempt has not yet
completed.
[EINPROGRESS] Nonblocking I/O is enabled using O_NONBLOCK,
O_NDELAY,or FIOSNBIO, and the connection cannot be completed
immediately. This is not a failure. Make the connect() call again a few
seconds later. Alternatively, wait for completion by calling
select()and selecting for write.
[EINTR] The connect was interrupted by a signal before the
connectsequence was complete. The building of the
connectionstill takes place, even though the user is not blocked on the
connect() call.
[EISCONN] The socket is already connected.
This does not actually *say* that the appropriate behavior after EINTR
is to retry, but reading between the lines one might infer that it will
work like the nonblocking case, wherein a retry of connect tries to link
to the existing connection attempt, not start a new one.
What's more important is that a retry will expose the possibility of
getting EALREADY or EISCONN. EALREADY certainly must be treated as
success the same as EINPROGRESS (if it exists on a given platform ---
better #ifdef it I think). Not so sure about EISCONN; does that imply
"you moron, this socket's been open forever", or does it get returned on
the first iteration that doesn't return EALREADY?
regards, tom lane