|
Lines 223-238
Link Here
|
| 223 |
struct timeval tv; |
223 |
struct timeval tv; |
| 224 |
socklen_t optlen; |
224 |
socklen_t optlen; |
| 225 |
int fdsetsz, optval, rc, result = -1; |
225 |
int fdsetsz, optval, rc, result = -1; |
|
|
226 |
int flags; |
| 226 |
|
227 |
|
| 227 |
if (timeout <= 0) |
228 |
if (timeout <= 0) |
| 228 |
return (connect(sockfd, serv_addr, addrlen)); |
229 |
return (connect(sockfd, serv_addr, addrlen)); |
| 229 |
|
230 |
|
| 230 |
if (fcntl(sockfd, F_SETFL, O_NONBLOCK) < 0) |
231 |
flags = fcntl(sockfd, F_GETFL); |
|
|
232 |
|
| 233 |
if (fcntl(sockfd, F_SETFL, flags|O_NONBLOCK) < 0) |
| 231 |
return (-1); |
234 |
return (-1); |
| 232 |
|
235 |
|
| 233 |
rc = connect(sockfd, serv_addr, addrlen); |
236 |
rc = connect(sockfd, serv_addr, addrlen); |
| 234 |
if (rc == 0) |
237 |
if (rc == 0) { |
|
|
238 |
fcntl(sockfd, F_SETFL, flags); |
| 235 |
return (0); |
239 |
return (0); |
|
|
240 |
} |
| 236 |
if (errno != EINPROGRESS) |
241 |
if (errno != EINPROGRESS) |
| 237 |
return (-1); |
242 |
return (-1); |
| 238 |
|
243 |
|
|
Lines 272-277
Link Here
|
| 272 |
errno = optval; |
277 |
errno = optval; |
| 273 |
break; |
278 |
break; |
| 274 |
} |
279 |
} |
|
|
280 |
fcntl(sockfd, F_SETFL, flags); |
| 275 |
result = 0; |
281 |
result = 0; |
| 276 |
break; |
282 |
break; |
| 277 |
default: |
283 |
default: |