Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Winsock选择错误10038,绑定并侦听成功_C++_Windows_Sockets_Winsock2 - Fatal编程技术网

C++ Winsock选择错误10038,绑定并侦听成功

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

我正在尝试使用Winsock的
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());
        }
    }