【问题标题】:Winsock select error 10038, bind and listen successfulWinsock选择错误10038,绑定监听成功
【发布时间】:2013-12-25 01:03:18
【问题描述】:

我正在尝试使用 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 将状态报告为“LISTENING”。 this->sock 是bind()listen() 使用的SOCKET。

【问题讨论】:

  • 你没有初始化client_socket。复制错误?
  • 请贴出创建绑定代码。在您发布client_socket[i]=null 的代码中,所以s = client_socket[i] 也使s 为空。

标签: c++ windows sockets winsock2


【解决方案1】:

您选择的其中一个 FD 不是套接字 FD。

【讨论】:

  • @downvoter 哦,拜托。这是错误文本的解释。这里没有错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多