我在一个线程建立了udp 的socket建立一个事件hRecvEvent并设置为FD_READ然后我sendto一段数据这时候想WSAWaitForMultipleEvents 等待hRecvEvent问题是 并没有数据传进来 hRecvEvent立刻被触发了 我得到的WSAWaitForMultipleEvents返回值也说明了hRecvEvent被触发sendto 也触发了FD_READ ?
调试欢乐多
SOCKET MainSocket; MainSocket = WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,WSA_FLAG_OVERLAPPED); if ( MainSocket == INVALID_SOCKET ) return -1; struct sockaddr_in inAddr;
inAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
inAddr.sin_family = AF_INET;
inAddr.sin_port = htons(3456); char a[10] = "hello";
int nRet = 0;
nRet = sendto( MainSocket,a,1,0,(PSOCKADDR)&inAddr,sizeof(inAddr)); cout <<"send to " << nRet << endl; WSAEVENT hRecvEvent = WSACreateEvent();
if ( hRecvEvent == WSA_INVALID_EVENT ) return -1; if ( WSAEventSelect(MainSocket,hRecvEvent,FD_READ) == SOCKET_ERROR ) return -1; WSAEVENT hEvnets[2];
hEvnets[0] = m_hKillEvent;
hEvnets[1] = hRecvEvent; DWORD dwEventCaused = WSAWaitForMultipleEvents(2,hEvnets,FALSE,WSA_INFINITE,FALSE);
if ( dwEventCaused == WSA_WAIT_FAILED || dwEventCaused == WAIT_OBJECT_0 )
{
}
cout <<"dwEventCaused = " << dwEventCaused << endl; if ( MainSocket == INVALID_SOCKET ) ::closesocket (MainSocket);
if ( m_hKillEvent != INVALID_HANDLE_VALUE )CloseHandle(m_hKillEvent);
if ( hRecvEvent != WSA_INVALID_EVENT ) WSACloseEvent(hRecvEvent);显示了dwEventCaused = 1 hRecvEvent触发了