diff options
Diffstat (limited to '')
| -rw-r--r-- | src/usr.bin/nc/netcat.c | 21 |
1 files changed, 6 insertions, 15 deletions
diff --git a/src/usr.bin/nc/netcat.c b/src/usr.bin/nc/netcat.c index 2596a6354e..ce613cd75d 100644 --- a/src/usr.bin/nc/netcat.c +++ b/src/usr.bin/nc/netcat.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: netcat.c,v 1.131 2015/09/03 23:06:28 sobrado Exp $ */ | 1 | /* $OpenBSD: netcat.c,v 1.132 2015/09/08 17:28:47 bluhm Exp $ */ |
| 2 | /* | 2 | /* |
| 3 | * Copyright (c) 2001 Eric Jackson <ericj@monkey.org> | 3 | * Copyright (c) 2001 Eric Jackson <ericj@monkey.org> |
| 4 | * | 4 | * |
| @@ -397,8 +397,8 @@ main(int argc, char *argv[]) | |||
| 397 | readwrite(s); | 397 | readwrite(s); |
| 398 | } else { | 398 | } else { |
| 399 | len = sizeof(cliaddr); | 399 | len = sizeof(cliaddr); |
| 400 | connfd = accept(s, (struct sockaddr *)&cliaddr, | 400 | connfd = accept4(s, (struct sockaddr *)&cliaddr, |
| 401 | &len); | 401 | &len, SOCK_NONBLOCK); |
| 402 | if (connfd == -1) { | 402 | if (connfd == -1) { |
| 403 | /* For now, all errnos are fatal */ | 403 | /* For now, all errnos are fatal */ |
| 404 | err(1, "accept"); | 404 | err(1, "accept"); |
| @@ -594,8 +594,8 @@ remote_connect(const char *host, const char *port, struct addrinfo hints) | |||
| 594 | 594 | ||
| 595 | res0 = res; | 595 | res0 = res; |
| 596 | do { | 596 | do { |
| 597 | if ((s = socket(res0->ai_family, res0->ai_socktype, | 597 | if ((s = socket(res0->ai_family, res0->ai_socktype | |
| 598 | res0->ai_protocol)) < 0) | 598 | SOCK_NONBLOCK, res0->ai_protocol)) < 0) |
| 599 | continue; | 599 | continue; |
| 600 | 600 | ||
| 601 | if (rtableid >= 0 && (setsockopt(s, SOL_SOCKET, SO_RTABLE, | 601 | if (rtableid >= 0 && (setsockopt(s, SOL_SOCKET, SO_RTABLE, |
| @@ -644,15 +644,9 @@ timeout_connect(int s, const struct sockaddr *name, socklen_t namelen) | |||
| 644 | { | 644 | { |
| 645 | struct pollfd pfd; | 645 | struct pollfd pfd; |
| 646 | socklen_t optlen; | 646 | socklen_t optlen; |
| 647 | int flags, optval; | 647 | int optval; |
| 648 | int ret; | 648 | int ret; |
| 649 | 649 | ||
| 650 | if (timeout != -1) { | ||
| 651 | flags = fcntl(s, F_GETFL, 0); | ||
| 652 | if (fcntl(s, F_SETFL, flags | O_NONBLOCK) == -1) | ||
| 653 | err(1, "set non-blocking mode"); | ||
| 654 | } | ||
| 655 | |||
| 656 | if ((ret = connect(s, name, namelen)) != 0 && errno == EINPROGRESS) { | 650 | if ((ret = connect(s, name, namelen)) != 0 && errno == EINPROGRESS) { |
| 657 | pfd.fd = s; | 651 | pfd.fd = s; |
| 658 | pfd.events = POLLOUT; | 652 | pfd.events = POLLOUT; |
| @@ -670,9 +664,6 @@ timeout_connect(int s, const struct sockaddr *name, socklen_t namelen) | |||
| 670 | err(1, "poll failed"); | 664 | err(1, "poll failed"); |
| 671 | } | 665 | } |
| 672 | 666 | ||
| 673 | if (timeout != -1 && fcntl(s, F_SETFL, flags) == -1) | ||
| 674 | err(1, "restoring flags"); | ||
| 675 | |||
| 676 | return (ret); | 667 | return (ret); |
| 677 | } | 668 | } |
| 678 | 669 | ||
