Skip to content
Snippets Groups Projects
Commit 70587641 authored by deuce's avatar deuce
Browse files

Check exceptions on sockets when select()ing for connect() completion since

that's what Windows does when a non-blocking connect() fails.

Should fix the IPv6 localhost issue.
parent 7c5ab20f
No related branches found
No related tags found
No related merge requests found
...@@ -411,6 +411,7 @@ int conn_socket_connect(struct bbslist *bbs) ...@@ -411,6 +411,7 @@ int conn_socket_connect(struct bbslist *bbs)
int nonblock; int nonblock;
struct timeval tv; struct timeval tv;
fd_set wfd; fd_set wfd;
fd_set efd;
int failcode=FAILURE_WHAT_FAILURE; int failcode=FAILURE_WHAT_FAILURE;
struct addrinfo hints; struct addrinfo hints;
struct addrinfo *res=NULL; struct addrinfo *res=NULL;
...@@ -476,7 +477,9 @@ int conn_socket_connect(struct bbslist *bbs) ...@@ -476,7 +477,9 @@ int conn_socket_connect(struct bbslist *bbs)
FD_ZERO(&wfd); FD_ZERO(&wfd);
FD_SET(sock, &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: case 0:
if(kbhit()) { if(kbhit()) {
failcode=FAILURE_ABORTED; failcode=FAILURE_ABORTED;
...@@ -488,11 +491,18 @@ int conn_socket_connect(struct bbslist *bbs) ...@@ -488,11 +491,18 @@ int conn_socket_connect(struct bbslist *bbs)
sock=INVALID_SOCKET; sock=INVALID_SOCKET;
continue; continue;
case 1: case 1:
if(socket_check(sock, NULL, NULL, 0)) if(FD_ISSET(sock, &efd)) {
goto connected; closesocket(sock);
closesocket(sock); sock=INVALID_SOCKET;
sock=INVALID_SOCKET; continue;
continue; }
else {
if(socket_check(sock, NULL, NULL, 0))
goto connected;
closesocket(sock);
sock=INVALID_SOCKET;
continue;
}
default: default:
break; break;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment