Hi,

I am running code similar to snmptrapd on linux server.  Currently there
are no traps receiving on the system. I am getting Time Out. Is it a valid
behavior to timeout if there are no traps .

while (netsnmp_running)
    {
        trapd_update_config();
        numfds = 0;

        /* Initialize the descriptors to null set */
        FD_ZERO(&readfds);
        FD_ZERO(&writefds);
        FD_ZERO(&exceptfds);

        block = 0;
        tvp = &timeout;
        timerclear(tvp);

        /* Set TimeOut as 5 sec */
        tvp->tv_sec = 10;
        tvp->tv_usec = 0;


        /* Setting values in absence of SNMP */
        snmp_select_info(&numfds, &readfds, tvp, &block);

        if (block == 1)
            tvp = NULL;    /* block without timeout */


        /* Adding an external event fds to read, write, excep fds.
         *  Returns biggest descriptor , when fd_sets ready for select(). */
        netsnmp_external_event_info(&numfds, &readfds, &writefds,
&exceptfds);

        /* Checking File Descriptor to Read */

        /* Call to select with return value from snmp_select_info */
        count = select(numfds, &readfds, &writefds, &exceptfds, tvp);

        gettimeofday(&Now, 0);
        /* IF found descriptor */
        if (count > 0)
        {
            netsnmp_dispatch_external_events(&count, &readfds, &writefds,
                    &exceptfds);
            /* If there any more events after external events then try SNMP
events */
            if (count > 0)
            {
                /*Reads each snmp socket that has inputs*/
                snmp_read(&readfds);
            }
        }
        else
            switch (count)
            {
                /* Cases depending number of descriptor */
                case 0:
  print ---->                  spLogErr("\n  TIME OUT");
                    snmp_timeout();
                    break;
                case -1:
                    spLogErr("\n Error at Select for Descriptor");
                    if (errno == EINTR)
                        continue;
                    snmp_log_perror("select");
                    netsnmp_running = 0;
                    break;
                default:
                    spLogErr("\n %s::%d Default Running", __FUNCTION__,
__LINE__);
                    fprintf(stderr, "select returned %d\n", count);
                    netsnmp_running = 0;
            }


Thanks & Regards
Jayshankar
_______________________________________________
Net-snmp-coders mailing list
Net-snmp-coders@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/net-snmp-coders

Reply via email to