struct ContextKey
{
SOCKET socket;
OVERLAPPED olin;
char buffer[8];
ContextKey()
{
memset( buffer , 0 ,sizeof(buffer));
}
OVERLAPPED olout ;
}; g_hIOCompletionPort = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 0 ); if ( NULL == g_hIOCompletionPort)
{
printf("\nError occurred while creating IOCP: %d.", 
WSAGetLastError());
dwStatus = WSAGetLastError() ;
break ;
} if ( SOCKET_ERROR == listen( SocektServer , 5 ) )
{
closesocket( SocektServer ) ;
dwStatus = WSAGetLastError() ;
break ;
} //Create worker threads
CreateWorkerThreads(); SocketAccept = accept( SocektServer , ( struct sockaddr* )&addrRemote , &naddrLen )  ;
if ( SocketAccept == INVALID_SOCKET )
{
dwStatus = WSAGetLastError() ;
break ;
}
OutputDebugString("接受成功\n");
ContextKey *pContextKey = new ContextKey ;
ZeroMemory(&(pContextKey->olin),sizeof(OVERLAPPED));
ZeroMemory(&(pContextKey->olout),sizeof(OVERLAPPED));
pContextKey->socket = SocketAccept ;
pContextKey->olout.hEvent = CreateEvent( NULL ,TRUE ,FALSE , 0 ) ;
pContextKey->olout.hEvent = (HANDLE)( (DWORD)pContextKey->olout.hEvent|0x1 ) ; if ( NULL == CreateIoCompletionPort( (HANDLE)pContextKey->socket ,g_hIOCompletionPort ,(DWORD)pContextKey ,0) )
{
if ( pContextKey!= NULL )
{
delete pContextKey ;
}
dwStatus = GetLastError() ;
break ;
} dwStatus = IssueRead(pContextKey) ;
Sleep(50);
这代码在我的普通控制台程序下一切正常,可移植到后台服务程序中,CreateIoCompletionPort第二次调用这地方就报GetLastError为87,参数错误,
真摸不着头绪。这SocketAccept 只是在开启的工作线程里使用