AIX bind wants the correct addrsize
authorHarald Klatte <klatte@hrz.uni-kassel.de>
Mon, 30 Aug 2010 08:40:43 +0000 (10:40 +0200)
committerRonnie Sahlberg <ronniesahlberg@gmail.com>
Fri, 3 Sep 2010 01:49:19 +0000 (11:49 +1000)
common/system_common.c

index 9aa4620bd82c5e7dee61621d5f51514f60a32e47..f28045f95e5362a864ade4dcfa64df4c0886e83e 100644 (file)
@@ -50,13 +50,16 @@ bool ctdb_sys_have_ip(ctdb_sock_addr *_addr)
        int ret;
        ctdb_sock_addr __addr = *_addr;
        ctdb_sock_addr *addr = &__addr;
+       socklen_t addrlen;
 
        switch (addr->sa.sa_family) {
        case AF_INET:
                addr->ip.sin_port = 0;
+               addrlen = sizeof(struct sockaddr_in);
                break;
        case AF_INET6:
                addr->ip6.sin6_port = 0;
+               addrlen = sizeof(struct sockaddr_in6);
                break;
        }
 
@@ -65,7 +68,7 @@ bool ctdb_sys_have_ip(ctdb_sock_addr *_addr)
                return false;
        }
 
-       ret = bind(s, (struct sockaddr *)addr, sizeof(ctdb_sock_addr));
+       ret = bind(s, (struct sockaddr *)addr, addrlen);
 
        close(s);
        return ret == 0;