Files
microser/mms/event2.c
2025-01-16 16:17:01 +08:00

75 lines
2.9 KiB
C

/************************************************************************/
/* SISCO SOFTWARE MODULE HEADER *****************************************/
/************************************************************************/
/* (c) Copyright Systems Integration Specialists Company, Inc., */
/* 2003 All Rights Reserved */
/* */
/* MODULE NAME : event2.c */
/* PRODUCT(S) : MMSEASE-LITE */
/* */
/* MODULE DESCRIPTION : */
/* Event handling function. This function may be used ONLY if */
/* the the POLLING version of the "gensock2" sockets interface is */
/* used (i.e. gensock2.c is compiled with GENSOCK_THREAD_SUPPORT */
/* NOT defined). */
/* */
/* GLOBAL FUNCTIONS DEFINED IN THIS MODULE : */
/* wait_any_event () */
/* */
/* MODIFICATION LOG : */
/* Date Who Rev Comments */
/* -------- --- ------ ------------------------------------------- */
/* 01/30/07 JRB 04 Shorten sleep to avoid delay detecting connect.*/
/* 12/11/06 JRB 03 Wait for Subnetwork events too. */
/* 11/01/06 JRB 02 Call sMsSleep when no connections, */
/* so we don't hog the CPU. */
/* 07/10/03 JRB 01 Created */
/************************************************************************/
#include "glbtypes.h"
#include "sysincs.h"
#include "mmsdefs.h"
#include "gensock2.h"
#include "clnp_sne.h" /* for "Subnetwork" event stuff */
/************************************************************************/
/* wait_any_event */
/* Wait for "socket" events OR "Subnetwork" events. */
/* NOTE: See comments about "PORTING" if this function needs */
/* to wait on "other" handles. */
/************************************************************************/
ST_VOID wait_any_event (ST_LONG max_ms_delay)
{
GENSOCK_FD_SET sockFds;
int nfds;
struct timeval selectTimeout;
/* This function assumes only one group of sockets to process. */
sockInitAllFds (&sockFds);
/* If Subnetwork handle "hPktSock" is valid, add it to list. */
if (hPktSock >= 0)
sockAddReadFds (&sockFds, hPktSock);
/* PORTING: Call sockAddReadFds, sockAddWriteFds, sockAddExceptFds
* to add "other" handles on which to wait.
*/
if (sockFds.totalfds)
{
/* Convert milliseconds to seconds and microseconds */
selectTimeout.tv_sec = max_ms_delay / 1000; /* seconds */
selectTimeout.tv_usec = (max_ms_delay % 1000) * 1000; /* microseconds */
nfds = select (sockFds.selectnfds, &sockFds.readfds, &sockFds.writefds, &sockFds.exceptfds, &selectTimeout);
/* PORTING: Add code to process "other" handles. */
}
else
sMsSleep (10); /* no sockets to wait on, so sleep a little to avoid hogging CPU.*/
/* NOTE: socket events are NOT processed here. This function simply returns,
* and the caller must call "mvl_comm_serve" to process the events.
*/
return;
}