pespin has submitted this change. ( 
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

Those parameters are not related to binding and hence should be
applicable before binding. This allows a caller setting them while not
caring about explicit binding (OSMO_SOCK_F_BIND).
Until recently calling this function without OSMO_SOCK_F_BIND was not
really supported, so the previous placement setting these params in the
function didn't matter much. It does now.

Change-Id: Ia32510e8db1de0cc0dc36cebf8a94f09e44fda70
---
M src/core/socket.c
1 file changed, 37 insertions(+), 19 deletions(-)

Approvals:
  Jenkins Builder: Verified
  osmith: Looks good to me, approved




diff --git a/src/core/socket.c b/src/core/socket.c
index 0bc275b..7fc1b72 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

--
To view, visit https://gerrit.osmocom.org/c/libosmocore/+/35233?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: Ia32510e8db1de0cc0dc36cebf8a94f09e44fda70
Gerrit-Change-Number: 35233
Gerrit-PatchSet: 3
Gerrit-Owner: pespin <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <[email protected]>
Gerrit-Reviewer: osmith <[email protected]>
Gerrit-Reviewer: pespin <[email protected]>
Gerrit-MessageType: merged

Reply via email to