diff options
-rw-r--r-- | lib/net.c | 5 | ||||
-rwxr-xr-x | tests/netcat.test | 11 |
2 files changed, 15 insertions, 1 deletions
@@ -114,7 +114,10 @@ int pollinate(int in1, int in2, int out1, int out2, int timeout, int shutdown_ti if (pollfds[i].revents & POLLIN) { int len = read(pollfds[i].fd, libbuf, sizeof(libbuf)); if (len<1) pollfds[i].revents = POLLHUP; - else xwrite(i ? out2 : out1, libbuf, len); + else { + xwrite(i ? out2 : out1, libbuf, len); + continue; + } } if (pollfds[i].revents & POLLHUP) { // Close half-connection. This is needed for things like diff --git a/tests/netcat.test b/tests/netcat.test new file mode 100755 index 00000000..40b51d40 --- /dev/null +++ b/tests/netcat.test @@ -0,0 +1,11 @@ +#!/bin/bash + +[ -f testing.sh ] && . testing.sh + +#testing "name" "command" "result" "infile" "stdin" + +{ dd if=/dev/zero bs=4k count=1 2>/dev/null | tr '\0' a; echo b; } > testfile +testing "more than buffer bytes left at end" \ + "netcat -lp 1234 wc -c & cat testfile | netcat 127.0.0.1 1234" \ + "4098\n" "" "" +rm -f testfile |