Winsock выберите ошибку 10038, привязка и прослушивание успешно

Я пытаюсь использовать Winsock's 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 сообщает о состоянии, как и ожидалось. этот-> носок это розетка, используемая bind() а также listen(),

1 ответ

Один из выбранных вами FD не является FD сокета.

Другие вопросы по тегам