diff options
author | José Bollo <jose.bollo@iot.bzh> | 2018-11-16 19:09:22 +0100 |
---|---|---|
committer | José Bollo <jose.bollo@iot.bzh> | 2018-11-16 19:11:18 +0100 |
commit | 442f25843bfde8fb835f0306f04d6da878bc5bca (patch) | |
tree | 8c14cb911b0652461a75e6b4a010c09918b369d8 | |
parent | 470abd47f759193e181bcb566d6d87bb75659efc (diff) |
afb-socket: Fix address reuseflounder_6.0.3flounder/6.0.36.0.3
Change-Id: I3ae51611b92762a4f09b1f6cca6ff27853cd9f95
Signed-off-by: José Bollo <jose.bollo@iot.bzh>
-rw-r--r-- | src/afb-socket.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/src/afb-socket.c b/src/afb-socket.c index 77b5edf8..13b465d6 100644 --- a/src/afb-socket.c +++ b/src/afb-socket.c @@ -158,7 +158,7 @@ static int open_unix(const char *spec, int server) * * @return the file descriptor number of the socket or -1 in case of error */ -static int open_tcp(const char *spec, int server) +static int open_tcp(const char *spec, int server, int reuseaddr) { int rc, fd; const char *service, *host, *tail; @@ -190,6 +190,10 @@ static int open_tcp(const char *spec, int server) fd = socket(iai->ai_family, iai->ai_socktype, iai->ai_protocol); if (fd >= 0) { if (server) { + if (reuseaddr) { + rc = 1; + setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &rc, sizeof rc); + } rc = bind(fd, iai->ai_addr, iai->ai_addrlen); } else { rc = connect(fd, iai->ai_addr, iai->ai_addrlen); @@ -262,7 +266,7 @@ static struct entry *get_entry(const char *uri, int *offset) */ static int open_uri(const char *uri, int server) { - int fd, rc, offset; + int fd, offset; struct entry *e; const char *api; @@ -281,7 +285,7 @@ static int open_uri(const char *uri, int server) fd = open_unix(uri, server); break; case Type_Inet: - fd = open_tcp(uri, server); + fd = open_tcp(uri, server, !e->noreuseaddr); break; case Type_Systemd: if (server) @@ -303,10 +307,6 @@ static int open_uri(const char *uri, int server) fcntl(fd, F_SETFD, FD_CLOEXEC); fcntl(fd, F_SETFL, O_NONBLOCK); if (server) { - if (!e->noreuseaddr) { - rc = 1; - setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &rc, sizeof rc); - } if (!e->nolisten) listen(fd, BACKLOG); } |