2009-05-22 8 views
2

Nach MSDN Sie einen nicht-blockierenden Socket wie diese erstellen haben:Non-Blocking-connect() mit Winsocks

unsigned nonblocking = 1; 
ioctlsocket(s, FIONBIO, &nonblocking);

und es in dem für select() danach Schreib fdset verwenden. Um zu überprüfen, ob die Verbindung erfolgreich war, müssen Sie sehen, ob der Socket schreibbar ist. Der MSDN-Artikel beschreibt jedoch nicht, wie auf Fehler überprüft wird.

Wie kann ich sehen, ob connect()taten nicht erfolgreich zu sein, und wenn das der Fall ist, warum es nicht gelungen?

Antwort

2

Sie überprüfen Socket-Fehler mit getsockopt(). Hier ist ein Ausschnitt aus Stevens (gewährt es Unix ist, aber winsock sollte etwas ähnliches haben):


if (FD_ISSET(sockfd, &rset) || FD_ISSET(sockfd, &wset)) { 
    len = sizeof(error); 
    if (getsockopt(sockfd, SOL_SOCKET, SO_ERROR, &error, &len) < 0) 
     return -1; 
} else { 
    /* error */ 
} 

Jetzt error gibt Ihnen die Fehlernummer, falls vorhanden.