diff options
author | Linus Nordberg <linus@nordu.net> | 2017-07-30 22:52:35 +0200 |
---|---|---|
committer | Linus Nordberg <linus@nordu.net> | 2017-07-30 22:52:35 +0200 |
commit | e35b909b4eb109cc891446cb982a157dbffef27d (patch) | |
tree | c9a14146f1fd8bc8f2a1dffcd1090b67180a1737 | |
parent | 27dcf856e91be99dd40aa504a8cf2258b52cf6da (diff) |
Verify return code from fcntl calls.
Have connectnonblocking() warn and fail if setting O_NONBLOCK fails.
Have it warn if restoring of flags fail.
coverity: 1449515
-rw-r--r-- | util.c | 12 |
1 files changed, 10 insertions, 2 deletions
@@ -171,7 +171,14 @@ int connectnonblocking(int s, const struct sockaddr *addr, socklen_t addrlen, st socklen_t len; origflags = fcntl(s, F_GETFL, 0); - fcntl(s, F_SETFL, origflags | O_NONBLOCK); + if (origflags == -1) { + debugerrno(errno, DBG_WARN, "Failed to get flags"); + return -1; + } + if (fcntl(s, F_SETFL, origflags | O_NONBLOCK) == -1) { + debugerrno(errno, DBG_WARN, "Failed to set O_NONBLOCK"); + return -1; + } if (!connect(s, addr, addrlen)) { r = 0; goto exit; @@ -189,7 +196,8 @@ int connectnonblocking(int s, const struct sockaddr *addr, socklen_t addrlen, st r = 0; exit: - fcntl(s, F_SETFL, origflags); + if (fcntl(s, F_SETFL, origflags) == -1) + debugerrno(errno, DBG_WARN, "Failed to set original flags back"); return r; } |