繁体   English   中英

WSAEventselect错误:10038

[英]WSAEventselect Error: 10038

我已经尝试解决了一段时间,并且我需要帮助,因为我没有想法。 我的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;

根据Winsock错误参考 ,这是WSAENOTSOCK错误,表示您正在尝试使用无效的套接字句柄进行操作。 没有什么地方出错在代码中出现的更多信息,我不认为我可以提供远不止这些建议,但我建议你检查,以确保你正确地创建套接字(可能是在调用accept上罪魁祸首是未初始化的套接字?)

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM