* Check for non-blocking, still-connecting sockets
*/
if (so->so_state & SS_ISFCONNECTING) {
- /* Connected */
- so->so_state &= ~SS_ISFCONNECTING;
-
- ret = send(so->s, (const char*)&ret, 0, 0);
- if (ret < 0) {
- /* XXXXX Must fix, zero bytes is a NOP */
- int error = WSAGetLastError();
- if (error == EAGAIN || error == WSAEWOULDBLOCK ||
- error == WSAEINPROGRESS || error == WSAENOTCONN)
+ int error = 0;
+ socklen_t error_len = sizeof(error);
+ if (getsockopt(so->s, SOL_SOCKET, SO_ERROR,
+ (char*)&error, &error_len) < 0)
+ error = WSAGetLastError();
+ if (error) {
+ if (error == EAGAIN || error == WSAEWOULDBLOCK ||
+ error == WSAEINPROGRESS || error == WSAENOTCONN)
continue;
-
/* else failed */
so->so_state = SS_NOFDREF;
+ } else {
+ so->so_state &= ~SS_ISFCONNECTING;
}
- /* else so->so_state &= ~SS_ISFCONNECTING; */
/*
* Continue tcp_input