File serialized-handling-multiple-clients.patch of Package netcat-openbsd

From: Aron Xu <aron@debian.org>
Date: Tue, 14 Feb 2012 23:02:00 +0800
Subject: serialized handling multiple clients

---
 netcat.c |   41 ++++++++++++++++++++---------------------
 1 file changed, 20 insertions(+), 21 deletions(-)

--- a/netcat.c
+++ b/netcat.c
@@ -664,7 +664,20 @@ 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);
+
+		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);
 
 # if defined(TLS)
 		if (usetls) {
@@ -678,22 +691,7 @@ main(int argc, char *argv[])
 # endif
 		/* 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.
@@ -760,15 +758,16 @@ main(int argc, char *argv[])
 # endif
 				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;