diff --git a/src/syncterm/conn.c b/src/syncterm/conn.c index 415d5ffef7bf4177e2e081c7423f34da18fc173d..f52349691d89f2a273b65856bcc440f00202091a 100644 --- a/src/syncterm/conn.c +++ b/src/syncterm/conn.c @@ -411,6 +411,7 @@ int conn_socket_connect(struct bbslist *bbs) int nonblock; struct timeval tv; fd_set wfd; + fd_set efd; int failcode=FAILURE_WHAT_FAILURE; struct addrinfo hints; struct addrinfo *res=NULL; @@ -476,7 +477,9 @@ int conn_socket_connect(struct bbslist *bbs) FD_ZERO(&wfd); FD_SET(sock, &wfd); - switch(select(sock+1, NULL, &wfd, NULL, &tv)) { + FD_ZERO(&efd); + FD_SET(sock, &efd); + switch(select(sock+1, NULL, &wfd, &efd, &tv)) { case 0: if(kbhit()) { failcode=FAILURE_ABORTED; @@ -488,11 +491,18 @@ int conn_socket_connect(struct bbslist *bbs) sock=INVALID_SOCKET; continue; case 1: - if(socket_check(sock, NULL, NULL, 0)) - goto connected; - closesocket(sock); - sock=INVALID_SOCKET; - continue; + if(FD_ISSET(sock, &efd)) { + closesocket(sock); + sock=INVALID_SOCKET; + continue; + } + else { + if(socket_check(sock, NULL, NULL, 0)) + goto connected; + closesocket(sock); + sock=INVALID_SOCKET; + continue; + } default: break; }