diff --git a/src/syncterm/conn.c b/src/syncterm/conn.c
index 226bfb20b1c6e4927ded5bd9263b4a135199a0ad..b736731f3b7c6f00e3a596bb856061b6ae278dca 100644
--- a/src/syncterm/conn.c
+++ b/src/syncterm/conn.c
@@ -451,6 +451,7 @@ int conn_socket_connect(struct bbslist *bbs)
 	while(kbhit())
 		getch();
 	for(cur=res; cur && failcode==FAILURE_WHAT_FAILURE; cur=cur->ai_next) {
+fprintf(stderr, "Looping...\n");
 		if(sock==INVALID_SOCKET) {
 			sock=socket(cur->ai_family, cur->ai_socktype, cur->ai_protocol);
 			if(sock==INVALID_SOCKET) {
@@ -470,7 +471,7 @@ int conn_socket_connect(struct bbslist *bbs)
 #if (EAGAIN!=EWOULDBLOCK)
 				case EWOULDBLOCK:
 #endif
-					for(;;) {
+					for(;sock!=INVALID_SOCKET;) {
 						tv.tv_sec=1;
 						tv.tv_usec=0;
 
@@ -488,7 +489,11 @@ int conn_socket_connect(struct bbslist *bbs)
 								sock=INVALID_SOCKET;
 								continue;
 							case 1:
-								goto connected;
+								if(socket_check(sock, NULL, NULL, 0))
+									goto connected;
+								closesocket(sock);
+								sock=INVALID_SOCKET;
+								continue;
 							default:
 								break;
 						}