|
The following code extract provides a trivial example of using a select
loop to receive events.
In order to keep the example small, safety checks such as
examining API call return values are not performed.
...
fd_set readFds, writeFds, exceptFds;
int32 nfds;
int32 *fdmask;
int32 pdu_length;
char pdu[MAX_PDU_LEN];
int create_time = 0;
char *encoding_type = "mdl";
char *syntax = "simpleEvent";
int32 streamId = 0;
...
for ( pdu_length = 1; ; ) /* forever */
{
/* get file descriptors in use by ECS engine */
msize = ESOK_getFdSet(ESOK_READMASK, &nfds, &fds); /*manpage*/
memcpy(&readFds, fds, msize);
msize = ESOK_getFdSet(ESOK_WRITEMASK, &nfds, &fds);
memcpy(&writeFds, fds, msize);
msize = ESOK_getFdSet(ESOK_EXCEPTIONMASK, &nfds, &fds);
memcpy(&exceptFds, fds, msize);
if( pdu_length > 0 && !FD_ISSET(fd, &readFds))
FD_SET(fd, &readFds);
select(nfds, &readFds, &writeFds, &exceptFds, 0);
if ( FD_ISSET(fd, &readFds) )
{
pdu_length = read_pdu( fd, pdu, MAX_PDU_LEN );
if ( pdu_length > 0 )
EIO_sendEvent (eid, pdu, pdu_length, create_time,
encoding_type, syntax);
else
close ( fd );
}
ESOK_process(0);
}
|