Winsock选择错误10038,绑定并听取成功

时间:2013-12-07 18:25:56

标签: c++ windows sockets winsock2

我正在尝试使用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。

1 个答案:

答案 0 :(得分:0)

您选择的其中一个FD不是插槽FD。