Re: [patch] helps fe-connect.c handle -EINTR more gracefully

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: [patch] helps fe-connect.c handle -EINTR more gracefully
Дата
Msg-id 23972.1004107583@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: [patch] helps fe-connect.c handle -EINTR more gracefully  (David Ford <david@blue-labs.org>)
Список pgsql-hackers
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


В списке pgsql-hackers по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: [patch] helps fe-connect.c handle -EINTR more gracefully
Следующее
От: Peter Eisentraut
Дата:
Сообщение: Re: 7.2b1 ...