我試圖使用Winsock的select()
函數。但是,儘管成功創建套接字,將其綁定到端口並開始監聽,但選擇失敗,錯誤10038(「不是套接字」)。我可以用TCPView確認套接字確實在端口8080上偵聽,所以我不知道爲什麼我得到這個錯誤。Winsock選擇錯誤10038,綁定並偵聽成功
這是我成功使用listen()
後添加的一些測試代碼。
fd_set readfds;
SOCKET client_socket[2], s;
int act, max_clients = 2;
while (true)
{
FD_ZERO(&readfds);
FD_SET(this->sock, &readfds);
for (int i = 0; i < max_clients; i++)
{
s = client_socket[i];
if(s > 0)
{
FD_SET(s, &readfds);
}
}
act = select(0, &readfds, NULL, NULL, NULL);
if (act == SOCKET_ERROR)
{
printf("Select failed: %d" , WSAGetLastError());
}
}
我已經採取了break
,通常會來的printf()
後,只是讓我可以看到它在套裝軟件更容易。正如預期的那樣,TCPView將該狀態報告爲「聆聽」。 this-> sock是由bind()
和listen()
使用的SOCKET。
您不初始化client_socket。複製錯誤? – usr
請發佈創建和綁定的代碼。在你發佈'client_socket [i] = null'的代碼中,所以's = client_socket [i]'也是'null'。 – MeNa