pespin has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/libosmocore/+/15758


Change subject: socket.c: Move glibc workarounds to same place in 
addrinfo_helper()
......................................................................

socket.c: Move glibc workarounds to same place in addrinfo_helper()

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



  git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/58/15758/1

diff --git a/src/socket.c b/src/socket.c
index c50af55..ef3bb58 100644
--- a/src/socket.c
+++ b/src/socket.c
@@ -56,7 +56,7 @@
 static struct addrinfo *addrinfo_helper(uint16_t family, uint16_t type, 
uint8_t proto,
                                        const char *host, uint16_t port, bool 
passive)
 {
-       struct addrinfo hints, *result;
+       struct addrinfo hints, *result, *rp;
        char portbuf[6];
        int rc;

@@ -66,6 +66,7 @@
        if (type == SOCK_RAW) {
                /* Workaround for glibc, that returns EAI_SERVICE (-8) if
                 * SOCK_RAW and IPPROTO_GRE is used.
+                * http://sourceware.org/bugzilla/show_bug.cgi?id=15015
                 */
                hints.ai_socktype = SOCK_DGRAM;
                hints.ai_protocol = IPPROTO_UDP;
@@ -84,6 +85,14 @@
                return NULL;
        }

+       for (rp = result; rp != NULL; rp = rp->ai_next) {
+               /* Workaround for glibc again */
+               if (type == SOCK_RAW) {
+                       rp->ai_socktype = SOCK_RAW;
+                       rp->ai_protocol = proto;
+               }
+       }
+
        return result;
 }

@@ -199,12 +208,6 @@
                        return -EINVAL;

                for (rp = result; rp != NULL; rp = rp->ai_next) {
-                       /* Workaround for glibc again */
-                       if (type == SOCK_RAW) {
-                               rp->ai_socktype = SOCK_RAW;
-                               rp->ai_protocol = proto;
-                       }
-
                        sfd = socket_helper(rp, flags);
                        if (sfd < 0)
                                continue;
@@ -253,12 +256,6 @@
                }

                for (rp = result; rp != NULL; rp = rp->ai_next) {
-                       /* Workaround for glibc again */
-                       if (type == SOCK_RAW) {
-                               rp->ai_socktype = SOCK_RAW;
-                               rp->ai_protocol = proto;
-                       }
-
                        if (sfd < 0) {
                                sfd = socket_helper(rp, flags);
                                if (sfd < 0)
@@ -332,12 +329,6 @@
        }

        for (rp = result; rp != NULL; rp = rp->ai_next) {
-               /* Workaround for glibc again */
-               if (type == SOCK_RAW) {
-                       rp->ai_socktype = SOCK_RAW;
-                       rp->ai_protocol = proto;
-               }
-
                sfd = socket_helper(rp, flags);
                if (sfd == -1)
                        continue;

--
To view, visit https://gerrit.osmocom.org/c/libosmocore/+/15758
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: Ifc3a30881f865f88bcfc1307a3c89c1ab79eecd4
Gerrit-Change-Number: 15758
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pes...@sysmocom.de>
Gerrit-MessageType: newchange

Reply via email to