signals can interrupt poll, which is now taken as a failure but should be retried

This commit is contained in:
Michael van der Werve 2020-11-23 09:57:35 +01:00
parent 7f40ad2d69
commit e4ec629d62
1 changed files with 11 additions and 2 deletions

View File

@ -129,8 +129,17 @@ private:
fd.events = POLLOUT;
fd.revents = 0;
// perform the poll, with a very long time to allow the event to occur
int ret = poll(&fd, 1, _timeout * 1000);
// the return code
int ret = 0;
// keep looping until we get a 'final' result
do
{
// perform the poll, with a very long time to allow the event to occur
ret = poll(&fd, 1, _timeout * 1000);
// we want to retry if the call was interrupted by a signal
} while (ret == -1 && errno == EINTR);
// log the error for the time being
if (ret == 0) _error = "connection timed out";