pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/libosmocore/+/35233?usp=email )
Change subject: socket: osmo_sock_init2_multiaddr2(): Apply params too if no OSMO_SOCK_F_BIND flag set ......................................................................
socket: osmo_sock_init2_multiaddr2(): Apply params too if no OSMO_SOCK_F_BIND flag set
Change-Id: Ia32510e8db1de0cc0dc36cebf8a94f09e44fda70 --- M src/core/socket.c 1 file changed, 30 insertions(+), 19 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/33/35233/1
diff --git a/src/core/socket.c b/src/core/socket.c index 7873e45..22488cf 100644 --- a/src/core/socket.c +++ b/src/core/socket.c @@ -959,23 +959,8 @@ goto ret_freeaddrinfo; }
- if (flags & OSMO_SOCK_F_BIND) { - /* Since so far we only allow IPPROTO_SCTP in this function, - no need to check below for "proto != IPPROTO_UDP || flags & OSMO_SOCK_F_UDP_REUSEADDR" */ - rc = setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, - &on, sizeof(on)); - if (rc < 0) { - int err = errno; - multiaddr_snprintf(strbuf, sizeof(strbuf), local_hosts, local_hosts_cnt); - LOGP(DLGLOBAL, LOGL_ERROR, - "cannot setsockopt socket:" - " %s:%u: %s\n", - strbuf, local_port, - strerror(err)); - goto ret_close; - } - - if (pars && pars->sctp.sockopt_auth_supported.set) { + if (pars) { + if (pars->sctp.sockopt_auth_supported.set) { /* RFC 5061 4.2.7: ASCONF also requires AUTH feature. */ rc = setsockopt_sctp_auth_supported(sfd, pars->sctp.sockopt_auth_supported.value); if (rc < 0) { @@ -991,7 +976,7 @@ } }
- if (pars && pars->sctp.sockopt_asconf_supported.set) { + if (pars->sctp.sockopt_asconf_supported.set) { rc = setsockopt_sctp_asconf_supported(sfd, pars->sctp.sockopt_asconf_supported.value); if (rc < 0) { int err = errno; @@ -1006,7 +991,7 @@ } }
- if (pars && pars->sctp.sockopt_initmsg.set) { + if (pars->sctp.sockopt_initmsg.set) { rc = setsockopt_sctp_initmsg(sfd, pars); if (rc < 0) { int err = errno; @@ -1019,6 +1004,23 @@ /* do not fail, some parameters will be left as the global default */ } } + } + + if (flags & OSMO_SOCK_F_BIND) { + /* Since so far we only allow IPPROTO_SCTP in this function, + no need to check below for "proto != IPPROTO_UDP || flags & OSMO_SOCK_F_UDP_REUSEADDR" */ + rc = setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, + &on, sizeof(on)); + if (rc < 0) { + int err = errno; + multiaddr_snprintf(strbuf, sizeof(strbuf), local_hosts, local_hosts_cnt); + LOGP(DLGLOBAL, LOGL_ERROR, + "cannot setsockopt socket:" + " %s:%u: %s\n", + strbuf, local_port, + strerror(err)); + goto ret_close; + }
/* Build array of addresses taking first entry for each host. TODO: Ideally we should use backtracking storing last used