WSAEventselect Ошибка: 10038 - PullRequest
       5

WSAEventselect Ошибка: 10038

0 голосов
/ 13 февраля 2011

Я уже некоторое время пытаюсь понять это, и мне нужна помощь, потому что у меня нет идей.Моя функция WSAEventselect возвращает номер ошибки 10038.

Код:

        // Error checking....
        if(netEvent.iErrorCode[FD_ACCEPT_BIT] != 0)
        {
            int temp1 = WSAGetLastError();
            emit ClientErrorSignal();
            return;
        }

        // Initializing socket
        if((newClient = accept(this->info->socket, NULL, NULL)) == INVALID_SOCKET)
        {
            int temp2 = WSAGetLastError();
            emit ClientErrorSignal();
            return;
        }

        // This is where the error occurs
        if(WSAEventSelect(newClient, &this->info->event, FD_READ|FD_CLOSE) == SOCKET_ERROR)
        {
            int temp3 = WSAGetLastError();
            emit ClientErrorSignal();
            return;
        }

this->info - это структура, которая передается в поток.

typedef struct {
    SOCKET socket;
    int size;
    bool isTcp;
    WSAEVENT event;
} SINFO, *PSINFO;

Ответы [ 2 ]

2 голосов
/ 13 февраля 2011

В соответствии с ссылкой на ошибку Winsock , это ошибка WSAENOTSOCK, означающая, что вы пытаетесь что-то сделать с недопустимым дескриптором сокета. Без дополнительной информации о том, где происходит ошибка в вашем коде, я не думаю, что смогу предложить гораздо больше советов, чем это, но я бы предложил проверить, чтобы убедиться, что вы создаете сокет правильно (возможно, вызов accept на неинициализированном сокете виновник?)

1 голос
/ 13 февраля 2011

Это может или не может быть связано с вашей проблемой, но второй параметр, который вы передаете WSAEventSelect, это WSAEVENT*, тогда как функция ожидает WSAEVENT.Просто передайте ручку напрямую, а не ее адрес:

WSAEventSelect(..., info->event, ...);
...