David Ford <[EMAIL PROTECTED]> 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 connect sequence was
                                   complete.  The building of the
                                   connection still 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

---------------------------(end of broadcast)---------------------------
TIP 5: Have you checked our extensive FAQ?

http://www.postgresql.org/users-lounge/docs/faq.html

Reply via email to