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;
 						}