Sophie

Sophie

distrib > Mandriva > 2009.0 > i586 > by-pkgid > dd069cdccb71831fcc6a905e768088ab > files > 1

netcat-bsd-1.84-3mdv2009.0.src.rpm

--- nc/netcat.c.pollhup	2005-09-27 13:25:53.000000000 +0200
+++ nc/netcat.c	2005-09-27 13:29:34.000000000 +0200
@@ -612,9 +612,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);
@@ -622,18 +620,30 @@
 					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 (!dflag) {
+		    if(pfd[1].revents & POLLIN) {
 			if ((n = read(wfd, buf, plen)) < 0)
 				return;
 			else if (n == 0) {
-				shutdown(nfd, SHUT_WR);
-				pfd[1].fd = -1;
-				pfd[1].events = 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;
+		    }
 		}
 	}
 }