2009-05-22 5 views
2

Согласно MSDN вы должны создать нелипкая гнездо, как это:Неблокирующая подключения() с WinSocks

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

и использовать его в записи-fdset для select() после этого. Чтобы проверить, было ли соединение успешным, вы должны убедиться, что сокет является записью. Однако в статье MSDN не описывается, как проверить наличие ошибок.

Как можно увидеть, если connect() сделал не успеха, и если это так, почему это не удалось?

ответ

2

Вы проверяете ошибку сокета с getsockopt(). Вот отрывок из Стивенс (предоставляется это Unix, но Winsock должны иметь что-то подобное):


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 */ 
} 

Теперь error дает номер ошибки, если таковые имеются.

 Смежные вопросы

  • Нет связанных вопросов^_^