[英]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.