summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ccan/net/net.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/ccan/net/net.c b/ccan/net/net.c
index d2eaa9ec..394c4e49 100644
--- a/ccan/net/net.c
+++ b/ccan/net/net.c
@@ -148,6 +148,17 @@ int net_connect_complete(struct pollfd pfds[2])
if (pfds[i].fd == -1)
continue;
+ if (pfds[i].revents & POLLHUP) {
+ /* Linux gives this if connecting to local
+ * non-listening port */
+ close(pfds[i].fd);
+ pfds[i].fd = -1;
+ if (pfds[!i].fd == -1) {
+ errno = ECONNREFUSED;
+ return -1;
+ }
+ continue;
+ }
if (getsockopt(pfds[i].fd, SOL_SOCKET, SO_ERROR, &err,
&errlen) != 0) {
net_connect_abort(pfds);