mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-04-28 20:44:12 +00:00
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 <sharpd@cumulusnetworks.com>
This commit is contained in:
parent
698ba8d026
commit
19d95d40c0
24
lib/agentx.c
24
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();
|
||||
|
Loading…
Reference in New Issue
Block a user