goto success;
}
+ DBG("Asynchronous connect for sock %d, performing polling with"
+ " timeout: %lums", sock->fd, timeout);
+
/*
* Perform poll loop following EINPROGRESS recommendation from
* connect(2) man page.
ret = getsockopt(sock->fd, SOL_SOCKET,
SO_ERROR, &optval, &optval_len);
if (ret) {
+ PERROR("getsockopt");
goto error;
}
if (!optval) {
connect_ret = 0;
goto success;
} else {
+ /* Get actual connect() errno from opt_val */
+ errno = optval;
goto error;
}
}
len_last = iov[0].iov_len;
ret = recvmsg(sock->fd, &msg, flags);
if (ret > 0) {
+ if (flags & MSG_DONTWAIT) {
+ goto end;
+ }
iov[0].iov_base += ret;
iov[0].iov_len -= ret;
assert(ret <= len_last);
ret = len;
}
/* Else ret = 0 meaning an orderly shutdown. */
-
+end:
return ret;
}