int main(int argc, const char* argv[]) { HWND hWnd; MSG msg; const char* host = DEFAULT_HOST; const char* port = DEFAULT_PORT; if (argc > 2) { host = argv[1]; port = argv[2]; } hWnd = IntiInstance((HINSTANCE)GetModuleHandle(NULL)); CHECK(InitializeServer(hWnd, host, atoi(port))); while (GetMessage(&msg, NULL, 0, 0)) { if (msg.message == WM_SOCKET) { SOCKET fd = msg.wParam; int event = WSAGETSELECTEVENT(msg.lParam); int error = WSAGETSELECTERROR(msg.lParam); HandleNetEvents(hWnd, fd, event, error); } else { TranslateMessage(&msg); DispatchMessage(&msg); } } CloseServer(); return 0; }
LONG CSecondPage::OnServiceEvent(WPARAM inWParam, LPARAM inLParam) { if (WSAGETSELECTERROR(inLParam) && !(HIWORD(inLParam))) { dlog( kDebugLevelError, "OnServiceEvent: window error\n" ); } else { SOCKET sock = (SOCKET) inWParam; // iterate thru list ServiceRefList::iterator begin = m_serviceRefList.begin(); ServiceRefList::iterator end = m_serviceRefList.end(); while (begin != end) { DNSServiceRef ref = *begin++; check(ref != NULL); if ((SOCKET) DNSServiceRefSockFD(ref) == sock) { DNSServiceProcessResult(ref); break; } } } return ( 0 ); }
BOOL OnWSAAccept(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { int rc; if(WSAGETSELECTERROR(lParam)!=0) { MessageBox(0,TEXT("Ошибка при получении асинхронного запроса[1]"),TEXT("Ошибка"),MB_OK); ServerStop(hWnd); return FALSE; } int acc_sin_len = sizeof(acc_sin); rab_socket = accept(srv_socket,(LPSOCKADDR) &acc_sin,(int FAR*) &acc_sin_len); if(rab_socket == INVALID_SOCKET) { MessageBox(0,TEXT("Ошибка при получении асинхронного запроса[2]"),TEXT("Ошибка"),MB_OK); ServerStop(hWnd); return FALSE; } rc = WSAAsyncSelect(rab_socket,hWnd,WSA_NETEVENT,FD_READ|FD_CLOSE); if(rc>0) { MessageBox(0,TEXT("Ошибка при получении асинхронного запроса[3]"),TEXT("Ошибка"),MB_OK); ServerStop(hWnd); return FALSE; } TCHAR wtmp[255]; wsprintf(wtmp,TEXT("[%lu] Хост %lu подключён"), clock(), acc_sin.sin_addr.s_addr); SendMessage(hLst,LB_ADDSTRING,0,(LPARAM)wtmp); }
LRESULT CAsynSocket::CSocketWnd::OnWinsocketNotify(WPARAM wParam, LPARAM lParam) { if (wParam == 0 && lParam == 0) return 0; int nErrorCode = WSAGETSELECTERROR(lParam); if(m_bResolved && m_hAsyncGetHostByName == (HANDLE)wParam) //需要解析主机名 { m_hAsyncGetHostByName = NULL; m_bResolved = FALSE; m_pSocket->_OnResolve(nErrorCode); } else //已经获取到了主机名,是其他Socket消息 { if((SOCKET)wParam!=m_pSocket->m_hSocket) return 0; ////////////////////////////////////////////////////////////////// //lParam = 658833440; 在有proxy的环境容易发生此类消息进行过滤 ////////////////////////////////////////////////////////////////// UINT nEvent = WSAGETSELECTEVENT(lParam); if(nEvent==FD_CLOSE && nErrorCode==WSAECONNABORTED) return 0; switch (nEvent) { case FD_READ: //读 { DWORD nBytes; if (!m_pSocket->IOCtl(FIONREAD, &nBytes)) nErrorCode = WSAGetLastError(); if (nBytes != 0 || nErrorCode != 0) m_pSocket->_OnReceive(nErrorCode); } break; case FD_WRITE: //写 m_pSocket->_OnSend(nErrorCode); break; case FD_OOB: m_pSocket->_OnOOBData(nErrorCode); break; case FD_ACCEPT: //接收 m_pSocket->_OnAccept(nErrorCode); break; case FD_CONNECT: //连接 m_pSocket->_OnConnect(nErrorCode); break; case FD_CLOSE: //关闭 m_pSocket->_OnClose(nErrorCode); break; default: break; } } return 0; }
HRESULT CMBCBaseObj::NetCall_Write(CMBCSocket* pMBCSock, WPARAM wParam, LPARAM lParam ) { int nErr =WSAGETSELECTERROR(lParam); int nEvent = WSAGETSELECTEVENT(lParam); SOCKET socRecv = (SOCKET)wParam; //not process ASSERT(FALSE); return S_OK; }
//============================================================================= int XSocket::iOnSocketEvent(WPARAM wParam, LPARAM lParam) { int WSAEvent; PutLogList("iOnSocketEvent"); if (m_cType != XSOCK_NORMALSOCK) return XSOCKEVENT_SOCKETMISMATCH; if (m_cType == NULL) return XSOCKEVENT_NOTINITIALIZED; if ((SOCKET)wParam != m_Sock) return XSOCKEVENT_SOCKETMISMATCH; WSAEvent = WSAGETSELECTEVENT(lParam); switch (WSAEvent) { case FD_CONNECT: if (WSAGETSELECTERROR(lParam) != 0) { if (bConnect(m_pAddr, m_iPortNum, m_uiMsg) == FALSE) return XSOCKEVENT_SOCKETERROR; return XSOCKEVENT_RETRYINGCONNECTION; } else { m_bIsAvailable = TRUE; return XSOCKEVENT_CONNECTIONESTABLISH; } break; case FD_READ: if (WSAGETSELECTERROR(lParam) != 0) { m_WSAErr = WSAGETSELECTERROR(lParam); return XSOCKEVENT_SOCKETERROR; } else return _iOnRead(); break; case FD_WRITE: return _iSendUnsentData(); break; case FD_CLOSE: m_cType = XSOCK_SHUTDOWNEDSOCK; return XSOCKEVENT_SOCKETCLOSED; break; } return XSOCKEVENT_UNKNOWN; }
int handleNetworkDatagramEvents(WPARAM wParam,LPARAM lParam) { switch(WSAGETSELECTEVENT(lParam)) { case FD_WRITE: javanotify_datagram_event( JAVACALL_EVENT_DATAGRAM_SENDTO_COMPLETED, (javacall_handle)wParam, (WSAGETSELECTERROR(lParam) == 0) ? JAVACALL_OK : JAVACALL_FAIL); #ifdef ENABLE_NETWORK_TRACING fprintf(stderr, "[UDP] FD_WRITE)\n"); #endif return 0; case FD_READ: #ifdef ENABLE_JSR_120 if (JAVACALL_OK == try_process_wma_emulator((javacall_handle)wParam)) { return 0; } #endif javanotify_datagram_event( JAVACALL_EVENT_DATAGRAM_RECVFROM_COMPLETED, (javacall_handle)wParam, (WSAGETSELECTERROR(lParam) == 0) ? JAVACALL_OK : JAVACALL_FAIL); #ifdef ENABLE_NETWORK_TRACING fprintf(stderr, "[UDP] FD_READ)\n"); #endif return 0; case FD_CLOSE: #ifdef ENABLE_NETWORK_TRACING fprintf(stderr, "[UDP] FD_CLOSE)\n"); #endif return 0; default: #ifdef ENABLE_NETWORK_TRACING fprintf(stderr, "[UDP] unsolicited event %d)\n", WSAGETSELECTEVENT(lParam)); #endif break; }//end switch return 0; }
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_SOCKET: { // 取得有事件发生的套节字句柄 SOCKET s = wParam; // 查看是否出错 if(WSAGETSELECTERROR(lParam)) { ::closesocket(s); return 0; } // 处理发生的事件 switch(WSAGETSELECTEVENT(lParam)) { case FD_ACCEPT: // 监听中的套接字检测到有连接进入 { SOCKET client = ::accept(s, NULL, NULL); ::WSAAsyncSelect(client, hWnd, WM_SOCKET, FD_READ|FD_WRITE|FD_CLOSE); } break; case FD_WRITE: { } break; case FD_READ: { char szText[1024] = { 0 }; if(::recv(s, szText, 1024, 0) == -1) ::closesocket(s); else printf("接收数据:%s", szText); } break; case FD_CLOSE: { ::closesocket(s); } break; } } return 0; case WM_DESTROY: ::PostQuitMessage(0) ; return 0 ; } // 将我们不处理的消息交给系统做默认处理 return ::DefWindowProc(hWnd, uMsg, wParam, lParam); }
HRESULT CMBCBaseObj::NetCall_Close(CMBCSocket* pMBCSock, WPARAM wParam, LPARAM lParam ) { int nErr =WSAGETSELECTERROR(lParam); int nEvent = WSAGETSELECTEVENT(lParam); SOCKET socRecv = (SOCKET)wParam; if (socRecv == *m_pSockBase) { ChangeSelfState(MBCSTATE_NETERR); } TRACE("\n Sock Closed"); return S_OK; }
/*------------------------------------------------------------------------------------------------------------------ -- FUNCTION: socket_event -- -- DATE: Febuary 6 2014 -- REVISIONS: none -- -- DESIGNER: Ramzi Chennafi -- PROGRAMMER: Ramzi Chennafi -- -- INTERFACE: void socket_event(HWND hwnd, WPARAM wParam, LPARAM lParam), where wParam is the socket and lParam is the error message. -- The hwnd is the parent HWND. -- -- RETURNS: void -- -- NOTES: -- Asynchronously responds to socket accept and read events on the server side of the program. Will reallocate the -- SocketInfo structure whenever a transfer ends. ----------------------------------------------------------------------------------------------------------------------*/ void socket_event(HWND hwnd, WPARAM wParam, LPARAM lParam){ SETTINGS * st = (SETTINGS*)GetClassLongPtr(hwnd, 0); char msg[MAX_SIZE]; if (WSAGETSELECTERROR(lParam)) { sprintf_s(msg, "WSAGETSELECTERROR %d, connection failed.\n", WSAGETSELECTERROR(lParam)); activity(msg, EB_STATUSBOX); closesocket(st->server_socket); } else { switch (WSAGETSELECTEVENT(lParam)) { case FD_ACCEPT: accept_data(hwnd, wParam); break; case FD_READ: if (st->protocol == TCP){ if (read_tcp(hwnd, st->server_socket) >= 1){ if ((SocketInfo = (LPSOCKET_INFORMATION)GlobalAlloc(GPTR, sizeof(SOCKET_INFORMATION))) == NULL){ activity("GlobalAlloc() failed with error\n", EB_STATUSBOX); } SocketInfo->header_received = 0; // transmission ends, program waits for a new header } } else{ if (read_udp(hwnd, st->server_socket) >= 1){ if ((SocketInfo = (LPSOCKET_INFORMATION)GlobalAlloc(GPTR, sizeof(SOCKET_INFORMATION))) == NULL){ activity("GlobalAlloc() failed with error\n", EB_STATUSBOX); } SocketInfo->header_received = 0; } } } } }
HRESULT CMBCBaseObj::NetCall_Connect(CMBCSocket* pMBCSock, WPARAM wParam, LPARAM lParam ) { int nErr =WSAGETSELECTERROR(lParam); int nEvent = WSAGETSELECTEVENT(lParam); SOCKET socRecv = (SOCKET)wParam; //i am client ASSERT(socRecv == *pMBCSock); if (nErr ==S_OK) { //CFWriteLog("==connected, soc = %d, ip =%s", socRecv, Addr2String(pMBCSock->m_addrs.addrRemote).c_str()); ChangeSelfState(MBCSTATE_OK); } return S_OK; }
afx_msg LRESULT CServerDlg::OnSock(WPARAM wParam, LPARAM lParam) { if (WSAGETSELECTERROR(lParam)) { return 1; } switch (WSAGETSELECTEVENT(lParam)) { case FD_ACCEPT: { sockaddr_in ClientAddr; int nSize = sizeof(ClientAddr); m_ClientSock = accept(m_ListenSock, (SOCKADDR *)&ClientAddr, &nSize); WSAAsyncSelect(m_ClientSock, GetSafeHwnd(), WM_SERVER, FD_READ | FD_CLOSE); char *p = inet_ntoa(ClientAddr.sin_addr); m_StrMsg.Format("请求IP:%s:%d", p, ntohs(ClientAddr.sin_port)); char szBuf[MAXBYTE] = { 0 }; lstrcpy(szBuf, m_StrMsg.GetBuffer()); send(m_ClientSock, (const char*)&szBuf, sizeof(szBuf), 0); break; } case FD_READ: { char szBuf[MAXBYTE] = { 0 }; recv(m_ClientSock, szBuf, MAXBYTE, 0); m_StrMsg = "对方发来命令"; m_StrMsg += szBuf; break; } case FD_CLOSE: { closesocket(m_ClientSock); m_StrMsg = "对方关闭连接"; break; } } CString temp; GetDlgItemText(IDC_EDIT, temp); m_StrMsg += "\r\n----------------------\r\n"; m_StrMsg += temp; SetDlgItemText(IDC_EDIT, m_StrMsg); m_StrMsg = ""; return 0; }
BOOL CALLBACK ClientProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { LPSOCKET_INFO SocketInfo; DWORD SendBytes; LPSTR psBuff; psBuff = (LPSTR)VirtualAlloc((LPVOID)NULL, (DWORD)(255), MEM_COMMIT, PAGE_READWRITE); if (WSAGETSELECTERROR(lParam)) { wsprintf(psBuff, (LPCTSTR)"Socket failed with error %d", WSAGetLastError()); AppendLog(psBuff); } else { switch (WSAGETSELECTEVENT(lParam)) { case FD_CONNECT: CreateSocketInfo(wParam); break; case FD_WRITE: SocketInfo = GetSocketInfo(wParam); if (SocketInfo->DataBuff.len == 0) { SocketInfo->DataBuff.buf = SocketInfo->Buffer; SocketInfo->DataBuff.len = 0; } if (WSASend(SocketInfo->Socket, &(SocketInfo->DataBuff), 1, &SendBytes, 0, NULL, NULL) == SOCKET_ERROR) { if (WSAGetLastError() != WSAEWOULDBLOCK) { wsprintf(psBuff, (LPCTSTR)"WSASend() failed with error %d", WSAGetLastError()); AppendLog(psBuff); //FreeSocketInfo(wParam); } } else { // Update the byte count SocketInfo->BytesSEND += SendBytes; } break; case FD_CLOSE: wsprintf(psBuff, (LPCTSTR)"Closing socket %d", wParam); AppendLog(psBuff); FreeSocketInfo(wParam); break; } return FALSE; } return FALSE; }
void UDPSocket::slotProcessWSAEvent(int socket, int lParam) { MSG msg; msg.wParam = socket; msg.lParam = lParam; PMSG pMsg = &msg; // Filtering out messages for other sockets. if (pMsg->wParam != socket_) { return; } if (WSAGETSELECTERROR(pMsg->lParam)) { qDebug("UDPSocket::slotProcessWSAEvent(): %d: Socket failed. Error: %d", (int) pMsg->wParam, WSAGETSELECTERROR(pMsg->lParam)); return; } switch (WSAGETSELECTEVENT(pMsg->lParam)) { case FD_READ: qDebug("UDPSocket::slotProcessWSAEvent: %d: FD_READ.", (int) pMsg->wParam); receive(pMsg); break; case FD_WRITE: qDebug("UDPSocket::slotProcessWSAEvent: %d: FD_WRITE.", (int) pMsg->wParam); send(pMsg); break; default: Socket::slotProcessWSAEvent(pMsg); break; } return; }
HRESULT CMBCHeartBeatObj::NetCall_Connect(CMBCSocket* pMBCSock, WPARAM wParam, LPARAM lParam ) { int nErr =WSAGETSELECTERROR(lParam); int nEvent = WSAGETSELECTEVENT(lParam); SOCKET socRecv = (SOCKET)wParam; //i am client ASSERT(socRecv == *pMBCSock); if (nErr ==S_OK) { m_timerLive.SetTimer(IDTIMER_LIVECHECK, INTERVAL_LIVECHECK, this, (LPARAM)this, WT_EXECUTEDEFAULT, 1000); TRACE("\n Sock Connected"); } return CMBCBaseObj::NetCall_Connect(pMBCSock, wParam, lParam); }
// /// DoNotification() is the SocketWindow's protected internal notification system. // TResult TSocketWindow::DoNotification(TParam1 param1, TParam2 param2) { SOCKET socket = param1; int error = (int)WSAGETSELECTERROR(param2); if (socket != SocketParent->Handle) return 0; switch (WSAGETSELECTEVENT(param2)) { case FD_READ: if (WindowNotification && (NotificationSet & NotifyRead)) { return WindowNotification->SendMessage(MsgSocketNotification, param1, param2); } SocketParent->DoReadNotification(socket, error); break; case FD_WRITE: if (WindowNotification && (NotificationSet & NotifyWrite)) { return WindowNotification->SendMessage(MsgSocketNotification, param1, param2); } SocketParent->DoWriteNotification(socket, error); break; case FD_OOB: if (WindowNotification && (NotificationSet & NotifyOOB)) { return WindowNotification->SendMessage(MsgSocketNotification, param1, param2); } SocketParent->DoOOBNotification(socket, error); break; case FD_ACCEPT: if (WindowNotification && (NotificationSet & NotifyAccept)) { return WindowNotification->SendMessage(MsgSocketNotification, param1, param2); } SocketParent->DoAcceptNotification(socket, error); break; case FD_CONNECT: if (WindowNotification && (NotificationSet & NotifyConnect)) { return WindowNotification->SendMessage(MsgSocketNotification, param1, param2); } SocketParent->DoConnectNotification(socket, error); break; case FD_CLOSE: if (WindowNotification && (NotificationSet & NotifyClose)) { return WindowNotification->SendMessage(MsgSocketNotification, param1, param2); } SocketParent->DoCloseNotification(socket, error); } return 1; }
LRESULT BTCtcp::ProcessNotifications(HWND hWnd, LPARAM lParam) { int wsaErr = WSAGETSELECTERROR(lParam); unsigned int ui=0; TCHAR szText[MAX_LOADSTRING]; switch (WSAGETSELECTEVENT(lParam)) { case FD_ACCEPT: break; case FD_CONNECT: // connect() operation terminated if (wsaErr == ERROR_SUCCESS) { // and no error --> we are connected :) iBTCSocketStatus = 5; iBTCError = ERROR_SUCCESS; ui=IDS_SS_CONNECTED; } else { iBTCSocketStatus = 3; // "connecting..." status did not complete successfully iBTCError = wsaErr; // save error information iBTCNodeStatus=0; // no connection ui=IDS_SS_FAILED; ShowError(IDS_Err_Socket, iBTCError); } break; case FD_WRITE: bWriteReady = true; // we are notified we can send (again) WriteToSocket(); // try to send data if something is waiting in our buffer break; case FD_READ: ReadFromSocket(hWnd); // data is awaiting break; case FD_CLOSE: // connection has been closed closesocket(skBTC); // release the socket iBTCSocketStatus=1; iBTCNodeStatus=0; ui=IDS_SS_NOTHING; break; } if (ui) { // show something to user LoadString(hInst, ui, szText, MAX_LOADSTRING); SetWindowText(hStaticSocketStatus, szText); // update status window related to our TCP connection InvalidateRect(hWnd, &rcSocketStatus, true); LoadString(hInst, (iBTCSocketStatus>3) ? IDS_DISCONNECT:IDS_CONNECT, szText, MAX_LOADSTRING); SetDlgItemText(hWnd, IDC_BTNBTCCONNECT, szText); EnableWindow(GetDlgItem(hWnd, IDC_BTNSQLCONNECT), iBTCSocketStatus<2); } return 0; }
void PASCAL CAsyncSocket::DoCallBack(WPARAM wParam, LPARAM lParam) { if (wParam == 0 && lParam == 0) return; // Has the socket be closed? CAsyncSocket* pSocket = CAsyncSocket::LookupHandle((SOCKET)wParam, TRUE); // If yes ignore message if (pSocket != NULL) return; pSocket = CAsyncSocket::LookupHandle((SOCKET)wParam, FALSE); if (pSocket == NULL) { // Must be in the middle of an Accept call pSocket = CAsyncSocket::LookupHandle(INVALID_SOCKET, FALSE); ASSERT(pSocket != NULL); pSocket->m_hSocket = (SOCKET)wParam; CAsyncSocket::DetachHandle(INVALID_SOCKET, FALSE); CAsyncSocket::AttachHandle(pSocket->m_hSocket, pSocket, FALSE); } int nErrorCode = WSAGETSELECTERROR(lParam); switch (WSAGETSELECTEVENT(lParam)) { case FD_READ: pSocket->OnReceive(nErrorCode); break; case FD_WRITE: pSocket->OnSend(nErrorCode); break; case FD_OOB: pSocket->OnOutOfBandData(nErrorCode); break; case FD_ACCEPT: pSocket->OnAccept(nErrorCode); break; case FD_CONNECT: pSocket->OnConnect(nErrorCode); break; case FD_CLOSE: pSocket->OnClose(nErrorCode); break; } }
LRESULT Client::HandleEvent(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_SOCKET: sPlayerMain.OnSocketEvent(wParam, WSAGETSELECTERROR(lParam), WSAGETSELECTEVENT(lParam)); return 0; case WM_CREATE: LoadContent(); return 0; case WM_KEYDOWN: KeyDown(wParam); return 0; case WM_PAINT: Draw(hwnd); return 0; case WM_LBUTTONDBLCLK: MouseLDButtonDown(lParam); return 0; case WM_MBUTTONDOWN: MouseMButtonDown(lParam); return 0; case WM_LBUTTONDOWN: MouseLButtonDown(lParam); return 0; case WM_RBUTTONDOWN: MouseRButtonDown(lParam); return 0; case WM_MOUSEMOVE: MouseMove(lParam); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd, msg, wParam, lParam); }
LONG ExplorerBarWindow::OnServiceEvent(WPARAM inWParam, LPARAM inLParam) { if (WSAGETSELECTERROR(inLParam) && !(HIWORD(inLParam))) { dlog( kDebugLevelError, "OnServiceEvent: window error\n" ); } else { SOCKET sock = (SOCKET) inWParam; // iterate thru list ServiceRefList::iterator it; for (it = m_serviceRefs.begin(); it != m_serviceRefs.end(); it++) { DNSServiceRef ref = *it; check(ref != NULL); if ((SOCKET) DNSServiceRefSockFD(ref) == sock) { DNSServiceErrorType err; err = DNSServiceProcessResult(ref); if (err != 0) { CString s; s.LoadString( IDS_MDNSRESPONDER_NOT_AVAILABLE ); mTree.DeleteAllItems(); mTree.InsertItem( s, 0, 0, TVI_ROOT, TVI_LAST ); Stop(ref); } break; } } } return ( 0 ); }
void CListener::ProcessSocketMsg(WPARAM wParam, LPARAM lParam) { if (WSAGETSELECTERROR(lParam)) { // Display the error and close the socket CloseConnection(wParam); return; } switch(WSAGETSELECTEVENT(lParam)) { case FD_ACCEPT: { SOCKADDR_IN ClientAddr = {0}; int iLen = sizeof(ClientAddr); accept(wParam, (LPSOCKADDR)&ClientAddr, &iLen); break; } case FD_READ: { // Receive data from the socket in // wParam ProcessRead(wParam); break; } case FD_WRITE: { // The socket in wParam is ready // for sending data break; } case FD_CLOSE: { // The connection is now closed CloseConnection(wParam); break; } } }
LRESULT CFrontier_API_SVDlg::OnReadTcp(WPARAM wParam, LPARAM lParam) { if (WSAGETSELECTERROR(lParam)) { AfxMessageBox("OnRead 发生错误!"); } else if (WSAGETSELECTEVENT(lParam)==FD_READ) { m_iByteFromGView=recv(m_RobGViewClient, m_chGViewRecvBuff, MaxRecvLength, 0); if (m_iByteFromGView == SOCKET_ERROR) { //AfxMessageBox("接收全维视觉信息失败! "); } else if (lstrlen(m_chGViewRecvBuff) != 0) { RecGlobViewData(m_chGViewRecvBuff,0); } } return 0; }
ULONG CTcpSocket::OnConnect(LPARAM lParam) { int err; DWORD dwThreadId; // needed for CreateThread err = WSAGETSELECTERROR(lParam); // Check to see if there was an error on the connection attempt. if (err) { // Some kind of error occurred. if (err == WSAECONNREFUSED) { OutputDebugString(m_strPeerName + _T(" 处没有应用程序应答\n")); } else { OutputDebugString(m_strPeerName + _T(" 没有在网络上\n")); } goto Error; } WSAAsyncSelect(m_socket, m_hWnd, 0, 0); // Put Connection in Event Object Notification Mode. WSAEventSelect(m_socket, m_hNetEvent, FD_READ | FD_WRITE | FD_CLOSE); // Start the I/O thread, and save the thread handle. m_hIOThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadFunc, this, 0, &dwThreadId); if (m_hIOThread == NULL) { OutputDebugString(_T("CreateThread() failed in OnConnect()\n")); goto Error; } OutputDebugString(m_strPeerName + _T(" joined the meeting\n")); return m_uPeerIP; Error: Unprepare(); return 0; }
/*--------------------------------------------------- called when the window received WSOCK_SELECT. receive SNTP data and set time. ---------------------------------------------------*/ void OnReceive(HWND hwnd, WPARAM wParam, LPARAM lParam) { struct sockaddr_in serversockaddr; struct NTP_Packet NTP_Recv; int sockaddr_Size; if(g_socket == -1) return; if(WSAGETSELECTERROR(lParam)) { SocketClose(hwnd, "failed to receive"); return; } if(g_socket != (int)wParam || WSAGETSELECTEVENT(lParam) != FD_READ) return; // receive data sockaddr_Size = sizeof(serversockaddr); if(recvfrom(g_socket, (char *)&NTP_Recv, sizeof(NTP_Recv), 0, (struct sockaddr *)&serversockaddr, &sockaddr_Size) == SOCKET_ERROR) { SocketClose(hwnd, "recvfrom() failed"); return; } // if Leap Indicator is 3 /* if(ntohl(NTP_Recv.Control_Word) >> 30 == 3) { SocketClose(hwnd, "server is unhealthy"); return; } */ // set system time SynchronizeSystemTime(ntohl(NTP_Recv.transmit_timestamp_seconds), ntohl(NTP_Recv.transmit_timestamp_fractions)); // close socket SocketClose(hwnd, NULL); }
void WAsyncSocket::SocketMessage(WPARAM wparam,LPARAM lparam) { // wparam is the socket number, lparam is the event code (lower word) and error code (upper word) int event_code=WSAGETSELECTEVENT(lparam); // lower word of lparam int error_code=WSAGETSELECTERROR(lparam); // upper word of lparam switch(event_code) { case FD_CONNECT: { OnConnect(error_code); break; } case FD_ACCEPT: { OnAccept(error_code); break; } case FD_READ: { OnReceive(error_code); break; } case FD_WRITE: { OnSend(error_code); break; } case FD_CLOSE: { OnClose(error_code); break; } default: { // Unknown Socket Message break; } } }
void Socket::slotProcessWSAEvent(PMSG pMsg) { if (WSAGETSELECTERROR(pMsg->lParam)) { //qDebug("Socket::slotProcessWSAEvent(): %d: Socket failed with error %d", //(int) pMsg->wParam, WSAGETSELECTERROR(pMsg->lParam)); return; } if (pMsg->wParam != socket_) { return; } switch (WSAGETSELECTEVENT(pMsg->lParam)) { case FD_CLOSE: qDebug("Socket::slotProcessWSAEvent(); %d: FD_CLOSE.", (int) pMsg->wParam); close(pMsg); break; } return; }
/*--------------------------------------------------- called when the window received WSOCK_SELECT. receive SNTP data and set time. ---------------------------------------------------*/ void OnReceive(HWND hwndSNTP, WPARAM wParam, LPARAM lParam) { struct sockaddr_in serversockaddr; struct NTP_Packet NTP_Recv; int sockaddr_Size; if(m_socket == INVALID_SOCKET) return; if(WSAGETSELECTERROR(lParam)) { SocketClose(hwndSNTP, "failed to receive"); return; } if(m_socket != (SOCKET)wParam || WSAGETSELECTEVENT(lParam) != FD_READ) return; // receive data m_dwTickCountOnRecv = timeGetTime(); sockaddr_Size = sizeof(serversockaddr); if(recvfrom(m_socket, (char *)&NTP_Recv, sizeof(NTP_Recv), 0, (struct sockaddr *)&serversockaddr, &sockaddr_Size) == SOCKET_ERROR) { SocketClose(hwndSNTP, "recvfrom() failed"); return; } // if Leap Indicator is 3 if((NTP_Recv.Control_Byte >> 6) == 3) { SocketClose(hwndSNTP, "server is unhealthy"); return; } // set system time SynchronizeSystemTime(hwndSNTP, &NTP_Recv); // close socket SocketClose(hwndSNTP, NULL); }
LRESULT CConfigPropertySheet::OnDataReady(WPARAM inWParam, LPARAM inLParam) { if (WSAGETSELECTERROR(inLParam) && !(HIWORD(inLParam))) { dlog( kDebugLevelError, "OnSocket: window error\n" ); } else { SOCKET sock = (SOCKET) inWParam; if ( m_browseDomainsRef && DNSServiceRefSockFD( m_browseDomainsRef ) == (int) sock ) { DNSServiceProcessResult( m_browseDomainsRef ); } else if ( m_regDomainsRef && DNSServiceRefSockFD( m_regDomainsRef ) == (int) sock ) { DNSServiceProcessResult( m_regDomainsRef ); } } return 0; }
BOOL CALLBACK IDAconnector::socket_proc (HWND h_dialog, UINT u_message, WPARAM w_param, LPARAM l_param) { // we are only interested in our socket callback. if (u_message == SOCKET_MSG) { if (WSAGETSELECTERROR(l_param)) { cleanup(); msg("[!] "PLUGIN_NAME"> Connection to server severed.\n"); return FALSE; } switch(WSAGETSELECTEVENT(l_param)) { // receiving data. case FD_READ: if (!connector_pull()) { cleanup(); msg("[!] "PLUGIN_NAME"> Connection to server severed.\n"); } break; // sending data. case FD_WRITE: break; // server connection closed. case FD_CLOSE: cleanup(); msg("[!] "PLUGIN_NAME"> Connection to server severed.\n"); break; } } return FALSE; }
int xsPalHandleSocketEvent(UINT message, WPARAM wParam, LPARAM lParam) { DWORD dwError, dwEvent; xsSysEvent evt = {0}; dwError = WSAGETSELECTERROR(lParam); dwEvent = WSAGETSELECTEVENT(lParam); evt.data.socket.sock = wParam; if (dwError == 0) evt.data.socket.status = XS_EC_OK; else evt.data.socket.status = XS_EC_ERROR; // TODO: translate error code switch (dwEvent) { case FD_CONNECT: evt.type = XS_EVT_SOCK_CONNECT; break; case FD_READ: evt.type = XS_EVT_SOCK_READ; break; case FD_WRITE: evt.type = XS_EVT_SOCK_WRITE; break; case FD_CLOSE: evt.type = XS_EVT_SOCK_CLOSE; break; default: // ignore other event return 0; } xsSysEventHandler(&evt); return 0; }