[Com0com-cvs] com2tcp com2tcp.cpp,1.7,1.8
The virtual serial port driver for Windows.
Brought to you by:
vfrolov
From: Vyacheslav F. <vf...@us...> - 2005-10-18 09:53:44
|
Update of /cvsroot/com0com/com2tcp In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24141 Modified Files: com2tcp.cpp Log Message: Added EVENT_ACCEPT Index: com2tcp.cpp =================================================================== RCS file: /cvsroot/com0com/com2tcp/com2tcp.cpp,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** com2tcp.cpp 3 Oct 2005 13:48:08 -0000 1.7 --- com2tcp.cpp 18 Oct 2005 09:53:36 -0000 1.8 *************** *** 20,23 **** --- 20,26 ---- * * $Log$ + * Revision 1.8 2005/10/18 09:53:36 vfrolov + * Added EVENT_ACCEPT + * * Revision 1.7 2005/10/03 13:48:08 vfrolov * Added --ignore-dsr and listen options *************** *** 48,51 **** --- 51,57 ---- /////////////////////////////////////////////////////////////// + static SOCKET Accept(SOCKET hSockListen); + static void Disconnect(SOCKET hSock); + /////////////////////////////////////////////////////////////// static void TraceLastError(const char *pFmt, ...) { *************** *** 107,111 **** } /////////////////////////////////////////////////////////////// ! static void InOut(HANDLE hC0C, SOCKET hSock, Protocol &protocol, BOOL ignoreDSR) { printf("InOut() START\n"); --- 113,122 ---- } /////////////////////////////////////////////////////////////// ! static void InOut( ! HANDLE hC0C, ! SOCKET hSock, ! Protocol &protocol, ! BOOL ignoreDSR, ! SOCKET hSockListen = INVALID_SOCKET) { printf("InOut() START\n"); *************** *** 122,125 **** --- 133,137 ---- EVENT_STAT, EVENT_CLOSE, + EVENT_ACCEPT, EVENT_NUM }; *************** *** 138,141 **** --- 150,156 ---- WSAEventSelect(hSock, hEvents[EVENT_CLOSE], FD_CLOSE); + if (hSockListen != INVALID_SOCKET) + WSAEventSelect(hSockListen, hEvents[EVENT_ACCEPT], FD_ACCEPT); + DWORD not_used; *************** *** 334,337 **** --- 349,366 ---- stop = TRUE; break; + case WAIT_OBJECT_0 + EVENT_ACCEPT: { + ResetEvent(hEvents[EVENT_ACCEPT]); + printf("EVENT_ACCEPT\n"); + + SOCKET hSockTmp = Accept(hSockListen); + + if (hSockTmp != INVALID_SOCKET) { + char msg[] = "*** Serial port is busy ***\n"; + + send(hSockTmp, msg, strlen(msg), 0); + Disconnect(hSockTmp); + } + break; + } case WAIT_TIMEOUT: break; *************** *** 346,349 **** --- 375,386 ---- CancelIo((HANDLE)hSock); + if (hSockListen != INVALID_SOCKET) { + WSAEventSelect(hSockListen, hEvents[EVENT_ACCEPT], 0); + + u_long blocking = 0; + + ioctlsocket(hSockListen, FIONBIO, &blocking); + } + CloseEvents(EVENT_NUM, hEvents); *************** *** 618,621 **** --- 655,681 ---- } /////////////////////////////////////////////////////////////// + + static SOCKET Accept(SOCKET hSockListen) + { + struct sockaddr_in sn; + int snlen = sizeof(sn); + SOCKET hSock = accept(hSockListen, (struct sockaddr *)&sn, &snlen); + + if (hSock == INVALID_SOCKET) { + TraceLastError("tcp2com(): accept()"); + return INVALID_SOCKET; + } + + u_long addr = ntohl(sn.sin_addr.s_addr); + + printf("Accept(%d.%d.%d.%d) - OK\n", + (addr >> 24) & 0xFF, + (addr >> 16) & 0xFF, + (addr >> 8) & 0xFF, + addr & 0xFF); + + return hSock; + } + static int tcp2com( const char *pPath, *************** *** 646,672 **** return 2; } ! for (;;) { ! struct sockaddr_in sn; ! int snlen = sizeof(sn); ! SOCKET hSock = accept(hSockListen, (struct sockaddr *)&sn, &snlen); ! if (hSock == INVALID_SOCKET) { ! TraceLastError("tcp2com(): accept()"); break; - } - - u_long addr = ntohl(sn.sin_addr.s_addr); - - printf("Accept(%d.%d.%d.%d) - OK\n", - (addr >> 24) & 0xFF, - (addr >> 16) & 0xFF, - (addr >> 8) & 0xFF, - addr & 0xFF); HANDLE hC0C = OpenC0C(pPath, ignoreDSR); if (hC0C != INVALID_HANDLE_VALUE) { ! InOut(hC0C, hSock, protocol, ignoreDSR); CloseHandle(hC0C); } --- 706,720 ---- return 2; } ! for (;;) { ! SOCKET hSock = Accept(hSockListen); ! if (hSock == INVALID_SOCKET) break; HANDLE hC0C = OpenC0C(pPath, ignoreDSR); if (hC0C != INVALID_HANDLE_VALUE) { ! InOut(hC0C, hSock, protocol, ignoreDSR, hSockListen); CloseHandle(hC0C); } |