summaryrefslogtreecommitdiff
path: root/util.c
diff options
context:
space:
mode:
authorLinus Nordberg <linus@nordu.net>2017-07-30 22:52:35 +0200
committerLinus Nordberg <linus@nordu.net>2017-07-30 22:52:35 +0200
commite35b909b4eb109cc891446cb982a157dbffef27d (patch)
treec9a14146f1fd8bc8f2a1dffcd1090b67180a1737 /util.c
parent27dcf856e91be99dd40aa504a8cf2258b52cf6da (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
Diffstat (limited to 'util.c')
-rw-r--r--util.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/util.c b/util.c
index 4cc7b8a..d9c3839 100644
--- a/util.c
+++ b/util.c
@@ -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;
}