|
Lines 253-259
waitfd(int fd, int *timeoutp, short events)
Link Here
|
| 253 |
errno = oerrno; |
253 |
errno = oerrno; |
| 254 |
if (r > 0) |
254 |
if (r > 0) |
| 255 |
return 0; |
255 |
return 0; |
| 256 |
else if (r == -1 && errno != EAGAIN) |
256 |
else if (r == -1 && errno != EAGAIN && errno != EINTR) |
| 257 |
return -1; |
257 |
return -1; |
| 258 |
else if (r == 0) |
258 |
else if (r == 0) |
| 259 |
break; |
259 |
break; |
|
Lines 292-303
timeout_connect(int sockfd, const struct sockaddr *serv_addr,
Link Here
|
| 292 |
return connect(sockfd, serv_addr, addrlen); |
292 |
return connect(sockfd, serv_addr, addrlen); |
| 293 |
|
293 |
|
| 294 |
set_nonblock(sockfd); |
294 |
set_nonblock(sockfd); |
| 295 |
if (connect(sockfd, serv_addr, addrlen) == 0) { |
295 |
for (;;) { |
| 296 |
/* Succeeded already? */ |
296 |
if (connect(sockfd, serv_addr, addrlen) == 0) { |
| 297 |
unset_nonblock(sockfd); |
297 |
/* Succeeded already? */ |
| 298 |
return 0; |
298 |
unset_nonblock(sockfd); |
| 299 |
} else if (errno != EINPROGRESS) |
299 |
return 0; |
| 300 |
return -1; |
300 |
} else if (errno == EINTR) |
|
|
301 |
continue; |
| 302 |
else if (errno != EINPROGRESS) |
| 303 |
return -1; |
| 304 |
break; |
| 305 |
} |
| 301 |
|
306 |
|
| 302 |
if (waitfd(sockfd, timeoutp, POLLIN | POLLOUT) == -1) |
307 |
if (waitfd(sockfd, timeoutp, POLLIN | POLLOUT) == -1) |
| 303 |
return -1; |
308 |
return -1; |