WSAEventselect错误:10038

时间:2011-02-13 02:50:46

标签: c++ sockets winsock

我一直试图解决这个问题一段时间,我需要帮助,因为我没有想法。我的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 个答案:

答案 0 :(得分:2)

根据the Winsock error reference,这是WSAENOTSOCK错误,这意味着您正在尝试使用无效的套接字句柄执行某些操作。如果没有关于代码中错误发生位置的更多信息,我认为我不能提供比这更多的建议,但我建议检查以确保正确创建套接字(可能是对{{1的调用)在未初始化的套接字上是罪魁祸首?)

答案 1 :(得分:1)

这可能与您的问题有关,也可能没有,但您传递给WSAEventSelect的第二个参数是WSAEVENT*,而该函数需要WSAEVENT。只需直接传递句柄,而不是其地址:

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