summaryrefslogtreecommitdiff
path: root/src/usr.bin/nc/netcat.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/usr.bin/nc/netcat.c21
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