From 19d95d40c08d96b8b6ba6c7d224701db339893ab Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Fri, 31 Jan 2020 10:44:23 -0500 Subject: [PATCH] lib: Test return of fcntl in agentx.c The agentx.c code was calling fcntl but not testing return code and handling it, thus making SA unhappy. Fix. Signed-off-by: Donald Sharp --- lib/agentx.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/lib/agentx.c b/lib/agentx.c index 2c6a43d1a7..b479b5ea4c 100644 --- a/lib/agentx.c +++ b/lib/agentx.c @@ -55,28 +55,42 @@ static int agentx_timeout(struct thread *t) static int agentx_read(struct thread *t) { fd_set fds; - int flags; + int flags, new_flags = 0; int nonblock = false; struct listnode *ln = THREAD_ARG(t); list_delete_node(events, ln); /* fix for non blocking socket */ flags = fcntl(THREAD_FD(t), F_GETFL, 0); - if (-1 == flags) + if (-1 == flags) { + flog_err(EC_LIB_SYSTEM_CALL, "Failed to get FD settings fcntl: %s(%d)", + strerror(errno), errno); return -1; + } if (flags & O_NONBLOCK) nonblock = true; else - fcntl(THREAD_FD(t), F_SETFL, flags | O_NONBLOCK); + new_flags = fcntl(THREAD_FD(t), F_SETFL, flags | O_NONBLOCK); + + if (new_flags == -1) + flog_err(EC_LIB_SYSTEM_CALL, "Failed to set snmp fd non blocking: %s(%d)", + strerror(errno), errno); FD_ZERO(&fds); FD_SET(THREAD_FD(t), &fds); snmp_read(&fds); /* Reset the flag */ - if (!nonblock) - fcntl(THREAD_FD(t), F_SETFL, flags); + if (!nonblock) { + new_flags = fcntl(THREAD_FD(t), F_SETFL, flags); + + if (new_flags == -1) + flog_err( + EC_LIB_SYSTEM_CALL, + "Failed to set snmp fd back to original settings: %s(%d)", + strerror(errno), errno); + } netsnmp_check_outstanding_agent_requests(); agentx_events_update();