Sophie

Sophie

distrib > Fedora > 14 > x86_64 > by-pkgid > 10f18a3c81c86525b16e984e86b57700 > files > 7

nc-1.100-2.fc14.src.rpm

--- nc/netcat.c	2011-03-08 10:53:14.708563001 +0100
+++ nc/netcat.c.new	2011-03-08 11:10:48.182562381 +0100
@@ -669,9 +669,7 @@
 			if ((n = read(nfd, buf, plen)) < 0)
 				return;
 			else if (n == 0) {
-				shutdown(nfd, SHUT_RD);
-				pfd[0].fd = -1;
-				pfd[0].events = 0;
+				goto shutdown_rd;
 			} else {
 				if (tflag)
 					atelnet(nfd, buf, n);
@@ -679,17 +677,29 @@
 					return;
 			}
 		}
+		else if (pfd[0].revents & POLLHUP) {
+		shutdown_rd:
+			shutdown(nfd, SHUT_RD);
+			pfd[0].fd = -1;
+			pfd[0].events = 0;
+		}
 
-		if (!dflag && pfd[1].revents & POLLIN) {
-			if ((n = read(wfd, buf, plen)) < 0)
-				return;
-			else if (n == 0) {
+		if (!dflag) {
+			if (pfd[1].revents & POLLIN) {
+				if ((n = read(wfd, buf, plen)) < 0)
+					return;
+				else if (n == 0) {
+					goto shutdown_wr;
+				} else {
+					if (atomicio(vwrite, nfd, buf, n) != n)
+						return;
+				}
+			}
+			else if (pfd[1].revents & POLLHUP) {
+			shutdown_wr:
 				shutdown(nfd, SHUT_WR);
 				pfd[1].fd = -1;
 				pfd[1].events = 0;
-			} else {
-				if (atomicio(vwrite, nfd, buf, n) != n)
-					return;
 			}
 		}
 	}