非阻塞方式SOCKET的问题,在线急等,立即结算,高手快来,绝对牛逼!
Subject: 请教一个关于非阻塞方式SOCKET的问题
你好:
请教一个问题
struct ContextKey
{
SOCKET sock;
OVERLAPPED overlapped; //I/O操作的重叠状态
//WSABUF DataBuf; //数据缓冲区结构
char InBuffer[4]; //真正的缓冲区
DWORD BytesSEND; //发送的字节数
DWORD BytesRECV; //收到的字节数
}*LPContextKey;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//创建完成端口句柄
if((ghCompPort = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 0)) == NULL)
{
MessageBox(NULL,"WSAStartup Failed",NULL,MB_OK);
exit(1);
}
listener = socket(AF_INET,SOCK_STREAM,0); //创建监听套接字
if(listener < 0)
{
MessageBox(NULL,"socket() failed","Error",MB_OK);
exit(1);
}
memset(&serverAddr,0,sizeof(serverAddr)); //绑定套接字到端口1017
serverAddr.sin_family = AF_INET;
serverAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
serverAddr.sin_port = htons(serverPort);
err = bind(listener,(LPSOCKADDR)&serverAddr,sizeof(serverAddr));
if(err < 0)
{
MessageBox(NULL,"bind() failed",NULL,MB_OK);
}
if(ghCompPort == NULL)
{
MessageBox(NULL,"CreateIoCompletionPort() failed",NULL,MB_OK);
}
CreateWorkerThreads(); //工作者线程
if(listen(listener, 5) == SOCKET_ERROR) // 开始监听
{
MessageBox(NULL,"CreateIoCompletionPort() failed",NULL,MB_OK);
}
for(;;)
{
struct ContextKey *pKey;
clAddrLen = sizeof(clientAddr);
//等待客户端的连接
newsocket = accept(listener,
(struct sockaddr *)&clientAddr,
&clAddrLen);
//newsocket = WSAAccept(listener,NULL,NULL,0);
if (newsocket < 0)
{
MessageBox(NULL,"accept() Failed",NULL,MB_OK);
exit(1);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//请问以下语句为何赋值不了, 谢谢
pKey->sock = newsocket;在于
//pKey->ovOut.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
//pKey->ovOut.hEvent = (HANDLE)((DWORD)pKey->ovOut.hEvent | 0x1);