Winsock选择错误10038,绑定和侦听成功

Winsock select error 10038, bind and listen successful

本文关键字:成功 绑定 选择 错误 10038 Winsock      更新时间:2023-10-16

我正在尝试使用Winsock的select()函数。然而,尽管成功地创建了一个套接字,将其绑定到一个端口并开始侦听,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());
        }
    }

我取了一个通常在printf()之后的break,这样我就可以在TCPView中更容易地看到它。正如预期的那样,TCPView将该状态报告为"正在收听"。这个->袜子是bind()listen()使用的SOCKET。

您选择的FD之一不是套接字FD。