--- zabbix-2.0.2/src/zabbix_server/poller/checks_snmp.c.orig 2012-09-09 04:13:20.000000000 -0400 +++ zabbix-2.0.2/src/zabbix_server/poller/checks_snmp.c 2012-09-09 04:16:05.000000000 -0400 @@ -20,6 +20,7 @@ #include "checks_snmp.h" #include "comms.h" #include "zbxjson.h" +#include "poller.h" #ifdef HAVE_SNMP @@ -1065,7 +1066,16 @@ case 0: zabbix_log(LOG_LEVEL_DEBUG, "Standard processing"); snmp_normalize(oid_normalized, item->snmp_oid, sizeof(oid_normalized)); - ret = get_snmp(ss, item, oid_normalized, value); + while (alarm(CONFIG_TIMEOUT) != 0) + { + ret = get_snmp(ss, item, oid_normalized, value); + zabbix_log(LOG_LEVEL_DEBUG, "In %s() calling get_snmp(), time remaining: %d, ret: %s", __function_name, alarm(1), zbx_result_string(ret)); + if (SUCCEED == ret) + { + break; + } + } + alarm(0); break; case 3: do @@ -1133,7 +1143,16 @@ zbx_snprintf(oid_full, sizeof(oid_full), "%s.%d", oid_normalized, idx); zabbix_log(LOG_LEVEL_DEBUG, "full OID:%s", oid_full); - ret = get_snmp(ss, item, oid_full, value); + while (alarm(CONFIG_TIMEOUT) != 0) + { + ret = get_snmp(ss, item, oid_full, value); + zabbix_log(LOG_LEVEL_DEBUG, "In %s() calling get_snmp(), time remaining: %d, ret: %s", __function_name, alarm(1), zbx_result_string(ret)); + if (SUCCEED == ret) + { + break; + } + } + alarm(0); } while (0); break;