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);
}
|