if(m_bAsyncConnect) //是否異步鏈接 { if(::WSAEventSelect(m_soClient, m_evSocket, FD_CONNECT | FD_CLOSE) != SOCKET_ERROR) { int rc = ::connect(m_soClient, (SOCKADDR*)&addr, sizeof(SOCKADDR_IN)); isOK = (rc == NO_ERROR || (rc == SOCKET_ERROR && ::WSAGetLastError() == WSAEWOULDBLOCK)); } } else { if(::connect(m_soClient, (SOCKADDR*)&addr, sizeof(SOCKADDR_IN)) != SOCKET_ERROR) { if(::WSAEventSelect(m_soClient, m_evSocket, FD_READ | FD_WRITE | FD_CLOSE) != SOCKET_ERROR) { if(FireConnect() != HR_ERROR) { m_enState = SS_STARTED; isOK = TRUE; } } } }
而後能夠建立一個新線程調用:數組
DWORD retval = ::WSAWaitForMultipleEvents(3, hEvents, FALSE, WSA_INFINITE, FALSE); //hEvents爲事件數組製做,3爲事件數組元素數目。網絡
等待網絡事件的觸發。異步
使用::WSAEnumNetworkEvents(m_soClient, m_evSocket, &events);枚舉出網絡事件類型。socket