summaryrefslogtreecommitdiffstats
path: root/src/socket.c
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2018-04-05 17:49:40 +0200
committerHarald Welte <laforge@gnumonks.org>2018-04-05 19:57:35 +0000
commit3a32147366faa6e08ae37700b1314b92f7b788a7 (patch)
treecacdb6d367d602fa867e0106891c8e21bb9599f5 /src/socket.c
parent27cf8df02408bf5e3b7c9140fb242019d9f1d671 (diff)
socket.c: osmo_sock_init: Several logic fixes and log improvements
See explanations in previous commit. Change-Id: I4889e777d8627fdfb52c97ab3ab353b6ed34aab2
Diffstat (limited to 'src/socket.c')
-rw-r--r--src/socket.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/src/socket.c b/src/socket.c
index 0e0aa240..d96f664d 100644
--- a/src/socket.c
+++ b/src/socket.c
@@ -339,8 +339,10 @@ int osmo_sock_init(uint16_t family, uint16_t type, uint8_t proto,
if (flags & OSMO_SOCK_F_CONNECT) {
rc = connect(sfd, rp->ai_addr, rp->ai_addrlen);
- if (rc != -1 || (rc == -1 && errno == EINPROGRESS))
- break;
+ if (rc != 0 && errno != EINPROGRESS) {
+ close(sfd);
+ continue;
+ }
} else {
rc = setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR,
&on, sizeof(on));
@@ -349,18 +351,24 @@ int osmo_sock_init(uint16_t family, uint16_t type, uint8_t proto,
"cannot setsockopt socket:"
" %s:%u: %s\n",
host, port, strerror(errno));
- break;
+ close(sfd);
+ continue;
+ }
+ if (bind(sfd, rp->ai_addr, rp->ai_addrlen) == -1) {
+ LOGP(DLGLOBAL, LOGL_ERROR, "unable to bind socket:"
+ "%s:%u: %s\n",
+ host, port, strerror(errno));
+ close(sfd);
+ continue;
}
- if (bind(sfd, rp->ai_addr, rp->ai_addrlen) != -1)
- break;
}
- close(sfd);
+ break;
}
freeaddrinfo(result);
if (rp == NULL) {
- LOGP(DLGLOBAL, LOGL_ERROR, "unable to connect/bind socket: %s:%u: %s\n",
- host, port, strerror(errno));
+ LOGP(DLGLOBAL, LOGL_ERROR, "no suitable addr found for: %s:%u\n",
+ host, port);
return -ENODEV;
}