summaryrefslogtreecommitdiff
path: root/repo/netcat/0009-serialized-handling-multiple-clients.patch
diff options
context:
space:
mode:
Diffstat (limited to 'repo/netcat/0009-serialized-handling-multiple-clients.patch')
-rw-r--r--repo/netcat/0009-serialized-handling-multiple-clients.patch75
1 files changed, 75 insertions, 0 deletions
diff --git a/repo/netcat/0009-serialized-handling-multiple-clients.patch b/repo/netcat/0009-serialized-handling-multiple-clients.patch
new file mode 100644
index 0000000..0b32737
--- /dev/null
+++ b/repo/netcat/0009-serialized-handling-multiple-clients.patch
@@ -0,0 +1,75 @@
+From: Aron Xu <aron@debian.org>
+Date: Tue, 14 Feb 2012 23:02:00 +0800
+Subject: serialized handling multiple clients
+
+---
+ netcat.c | 39 +++++++++++++++++++--------------------
+ 1 file changed, 19 insertions(+), 20 deletions(-)
+
+diff --git a/netcat.c b/netcat.c
+index f4d85af..5d3a2d3 100644
+--- a/netcat.c
++++ b/netcat.c
+@@ -459,26 +459,24 @@ main(int argc, char *argv[])
+ s = unix_bind(host);
+ else
+ s = unix_listen(host);
+- }
++ } else
++ s = local_listen(host, uport, hints);
++ if (s < 0)
++ err(1, NULL);
++
++ char* local;
++ if (family == AF_INET6)
++ local = ":::";
++ else
++ local = "0.0.0.0";
++ fprintf(stderr, "Listening on [%s] (family %d, port %d)\n",
++ host ?: local,
++ family,
++ *uport);
+
+ /* Allow only one connection at a time, but stay alive. */
+ for (;;) {
+- if (family != AF_UNIX)
+- s = local_listen(host, uport, hints);
+- if (s < 0)
+- err(1, NULL);
+
+- char* local;
+- if (family == AF_INET6 )
+- local = "0.0.0.0";
+- else if (family == AF_INET)
+- local = ":::";
+- else
+- local = "unknown";
+- fprintf(stderr, "Listening on [%s] (family %d, port %d)\n",
+- host ?: local,
+- family,
+- *uport);
+ /*
+ * For UDP and -k, don't connect the socket, let it
+ * receive datagrams from multiple socket pairs.
+@@ -525,15 +523,16 @@ main(int argc, char *argv[])
+ close(connfd);
+ }
+
+- if (family != AF_UNIX)
++ if (kflag)
++ continue;
++ if (family != AF_UNIX) {
+ close(s);
++ }
+ else if (uflag) {
+ if (connect(s, NULL, 0) < 0)
+ err(1, "connect");
+ }
+-
+- if (!kflag)
+- break;
++ break;
+ }
+ } else if (family == AF_UNIX) {
+ ret = 0;
+--