我正在编写一个服务器应用程序,我想使用 IOCompletion 端口,因此我为服务器编写了一个原型,但我遇到了 GetQueuedCompletionStatus 的问题,它永远不会返回(它会阻塞)。下面是我的代码:
bool CreateSocketOverlappedServer()
{
WSADATA wsaData;
SOCKADDR_IN sockaddr;
if(WSAStartup(MAKEWORD(2,2,),&wsaData)){
_tprintf(_T("Unable to start up\n"));
return false;
}
SrvSocket = WSASocket(AF_INET,SOCK_STREAM,0,NULL,NULL,WSA_FLAG_OVERLAPPED);
if(SrvSocket==INVALID_SOCKET){
_tprintf(_T("Unable to start socket\n"));
return false;
}
sockaddr.sin_family = AF_INET;
sockaddr.sin_port = htons(10000);
sockaddr.sin_addr.s_addr = INADDR_ANY;
/* now bind the socket */
if(bind(SrvSocket, (SOCKADDR *)&sockaddr, sizeof(SOCKADDR_IN))==SOCKET_ERROR){
_tprintf(_T("Unable to bind socket\n"));
return false;
}
if(listen(SrvSocket, 5)==SOCKET_ERROR){
_tprintf(_T("Error listening\n"));
return false;
}
return true;
}
您没有正确使用完成端口,因此它没有任何作用,因此没有要报告的状态。将完成端口与套接字一起使用是一个两步过程,但您只执行了一半步骤。
阅读以下 MSDN 文章了解详细信息:
Windows Sockets 2.0:使用完成端口编写可扩展的 Winsock 应用程序 http://msdn.microsoft.com/en-us/magazine/cc302334.aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)