我正在尝试使用Winsock的select()
函数。但是,尽管成功创建了套接字,将其绑定到端口并开始监听,但选择失败并显示错误10038(“不是套接字”)。我可以用TCPView确认套接字确实正在侦听端口8080,所以我不确定为什么我会收到此错误。
这是我在成功使用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中看到它更容易。正如预期的那样,TCPView将状态报告为“LISTENING”。 this-&gt; sock是bind()
和listen()
使用的SOCKET。
答案 0 :(得分:0)
您选择的其中一个FD不是插槽FD。