summaryrefslogtreecommitdiffstats
path: root/network/netcat-openbsd/patches/0010-serialized-handling-multiple-clients.patch
blob: 3d6c4ad9a6f63abb98eab6b38a2508439f32fe08 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
From: Aron Xu <aron@debian.org>
Date: Tue, 14 Feb 2012 23:02:00 +0800
Subject: serialized handling multiple clients

---
 netcat.c |   17 ++++++++---------
 1 file changed, 8 insertions(+), 9 deletions(-)

--- a/netcat.c
+++ b/netcat.c
@@ -708,7 +708,10 @@ main(int argc, char *argv[])
 				s = unix_bind(host, 0);
 			else
 				s = unix_listen(host);
-		}
+		} else
+			s = local_listen(host, uport, hints);
+		if (s < 0)
+			err(1, NULL);
 
 # if defined(TLS)
 		if (usetls) {
@@ -722,13 +725,6 @@ main(int argc, char *argv[])
 # endif
 		/* Allow only one connection at a time, but stay alive. */
 		for (;;) {
-			if (family != AF_UNIX) {
-				if (s != -1)
-					close(s);
-				s = local_listen(host, uport, hints);
-			}
-			if (s == -1)
-				err(1, NULL);
 			if (uflag && kflag) {
 				/*
 				 * For UDP and -k, don't connect the socket,
@@ -805,8 +801,11 @@ main(int argc, char *argv[])
 					err(1, "connect");
 			}
 
-			if (!kflag)
+			if (!kflag) {
+				if (s != -1)
+					close(s);
 				break;
+			}
 		}
 	} else if (family == AF_UNIX) {
 		ret = 0;