C++ Winsock选择错误10038,绑定并侦听成功
我正在尝试使用Winsock的C++ Winsock选择错误10038,绑定并侦听成功,c++,windows,sockets,winsock2,C++,Windows,Sockets,Winsock2,我正在尝试使用Winsock的select()函数。但是,尽管成功创建了套接字,将其绑定到端口并开始侦听,select仍失败,出现错误10038(“非套接字”)。我可以用TCPView确认套接字确实在侦听端口8080,因此我不确定为什么会出现此错误 这是我在成功使用listen()之后添加的一些测试代码 fd\u设置readfds; 套接字客户端\u套接字[2],s; int act,最大客户端数=2; while(true) { FD_零(&readfds); FD_集(此->袜子和读取FDS
select()
函数。但是,尽管成功创建了套接字,将其绑定到端口并开始侦听,select仍失败,出现错误10038(“非套接字”)。我可以用TCPView确认套接字确实在侦听端口8080,因此我不确定为什么会出现此错误
这是我在成功使用listen()
之后添加的一些测试代码
fd\u设置readfds;
套接字客户端\u套接字[2],s;
int act,最大客户端数=2;
while(true)
{
FD_零(&readfds);
FD_集(此->袜子和读取FDS);
对于(int i=0;i0)
{
FD_集(s和readfds);
}
}
act=select(0,&readfds,NULL,NULL,NULL);
if(act==SOCKET\u错误)
{
printf(“选择失败:%d”,WSAGetLastError());
}
}
我在
printf()
后面加了一个break
,以便在TCPView中更容易看到它。TCPView将该状态报告为“正在侦听”,正如预期的那样。此->sock是由bind()
和listen()
使用的套接字,您在其中选择的一个FD不是套接字FD。您不初始化客户端\u套接字。复制错误?请张贴创建和绑定代码。在您发布的代码中,client\u socket[i]=null
,因此s=client\u socket[i]
也会使s
为null。@down。这是对错误文本的解释。这里没有错误。
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());
}
}