mirror of
https://github.com/Ponce/slackbuilds
synced 2024-10-21 22:27:10 +02:00
60 lines
1.2 KiB
Diff
60 lines
1.2 KiB
Diff
|
From: Aron Xu <aron@debian.org>
|
||
|
Date: Mon, 13 Feb 2012 15:08:33 +0800
|
||
|
Subject: poll hup
|
||
|
|
||
|
---
|
||
|
netcat.c | 24 +++++++++++++++++-------
|
||
|
1 file changed, 17 insertions(+), 7 deletions(-)
|
||
|
|
||
|
diff --git a/netcat.c b/netcat.c
|
||
|
index d912544..fdaca44 100644
|
||
|
--- a/netcat.c
|
||
|
+++ b/netcat.c
|
||
|
@@ -884,9 +884,7 @@ readwrite(int nfd)
|
||
|
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);
|
||
|
@@ -894,18 +892,30 @@ readwrite(int nfd)
|
||
|
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;
|
||
|
+ }
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
--
|