Browse Source

net: don't return still-connecting fd.

If one connect failed, we'd return the other one without
waiting for the connect to complete.  This resulted in
read() returning 0, which was really weird.

The downside: the poll doesn't seem to time out when the
connect times out (Linux 3.13 x86-64).

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Rusty Russell 11 years ago
parent
commit
7735457533
1 changed files with 3 additions and 0 deletions
  1. 3 0
      ccan/net/net.c

+ 3 - 0
ccan/net/net.c

@@ -159,6 +159,9 @@ int net_connect_complete(struct pollfd pfds[2])
 			}
 			}
 			continue;
 			continue;
 		}
 		}
+		if (!(pfds[i].revents & POLLOUT))
+			continue;
+
 		if (getsockopt(pfds[i].fd, SOL_SOCKET, SO_ERROR, &err,
 		if (getsockopt(pfds[i].fd, SOL_SOCKET, SO_ERROR, &err,
 			       &errlen) != 0) {
 			       &errlen) != 0) {
 			net_connect_abort(pfds);
 			net_connect_abort(pfds);