errno = oerrno;
if (r > 0)
return 0;
else if (r == -1 && errno != EAGAIN)
else if (r == -1 && errno != EAGAIN && errno != EINTR)
return -1;
else if (r == 0)
break;
/* Succeeded already? */
unset_nonblock(sockfd);
} else if (errno != EINPROGRESS)
} else if (errno != EINPROGRESS && errno != EINTR)
if (waitrfd(sockfd, timeoutp) == -1)