Control: tag -1 patch

On Fri, 06 Mar 2020 at 17:50:38 +0100, Guilhem Moulin wrote:
> Also, calling exit() in fillbuf() is the wrong approach as the buffer
> might not have been drained yet.

The enclosed patch seems to work for me.  (Untested though, so not
pushing just yet.)  Since for UDP sockets we won't get revents=POLLIN
after calling ‘shutdown(pfd[POLL_NETOUT].fd, SHUT_WR)’, a workaround is
to set pfd[POLL_NETIN].fd to -1 as well at the end of readwrite().

-- 
Guilhem.
--- a/netcat.c
+++ b/netcat.c
@@ -1607,6 +1607,10 @@
 			if (pfd[POLL_NETOUT].fd != -1 && Nflag)
 				shutdown(pfd[POLL_NETOUT].fd, SHUT_WR);
 			pfd[POLL_NETOUT].fd = -1;
+			if (uflag && pfd[POLL_NETIN].fd != -1 && Nflag && netinbufpos == 0) {
+				shutdown(pfd[POLL_NETIN].fd, SHUT_RD);
+				pfd[POLL_NETIN].fd = -1;
+			}
 		}
 		/* net in gone and queue empty? */
 		if (pfd[POLL_NETIN].fd == -1 && netinbufpos == 0) {

Attachment: signature.asc
Description: PGP signature

Reply via email to