From: Rusty Russell Date: Tue, 27 May 2014 03:47:29 +0000 (+0930) Subject: net: don't return still-connecting fd. X-Git-Url: http://git.ozlabs.org/?p=ccan;a=commitdiff_plain;h=77354575335e5ee900a4ba126d4d76e34b9273e8 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 --- diff --git a/ccan/net/net.c b/ccan/net/net.c index 4c84ba7a..7867054d 100644 --- a/ccan/net/net.c +++ b/ccan/net/net.c @@ -159,6 +159,9 @@ int net_connect_complete(struct pollfd pfds[2]) } continue; } + if (!(pfds[i].revents & POLLOUT)) + continue; + if (getsockopt(pfds[i].fd, SOL_SOCKET, SO_ERROR, &err, &errlen) != 0) { net_connect_abort(pfds);