Previous Menu Next
Example Code: Using a Select Loop
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);
}