Merge branch 'master' of github.com:fatbob313/umurmur
[umurmur.git] / src / server.c
index e83a68ab7f0b3bb3b895687647e9681a2c5821cd..8aa356c58c2f0df6e69f580f947e8137dd4183c7 100644 (file)
@@ -67,11 +67,11 @@ void checkIPversions()
        int testsocket = -1;
 
        testsocket = socket(PF_INET, SOCK_STREAM, 0);
-       hasv4 = (errno == EAFNOSUPPORT) ? false : true;
+       hasv4 = (errno == EAFNOSUPPORT || errno == EPROTONOSUPPORT) ? false : true;
        if (!(testsocket < 0)) close(testsocket);
 
        testsocket = socket(PF_INET6, SOCK_STREAM, 0);
-       hasv6 = (errno == EAFNOSUPPORT) ? false : true;
+       hasv6 = (errno == EAFNOSUPPORT || errno == EPROTONOSUPPORT) ? false : true;
        if (!(testsocket < 0)) close(testsocket);
 
        if(!hasv4)
@@ -85,7 +85,6 @@ void checkIPversions()
                Log_info("IPv6 is not supported by this system");
                nofServerSocks -= 2;
        }
-
        if(nofServerSocks == 0)
        {
                Log_fatal("Neither IPv4 nor IPv6 are supported by this system");
@@ -96,10 +95,17 @@ void checkIPversions()
 struct sockaddr_storage** Server_setupAddressesAndPorts()
 {
        struct sockaddr_storage** addresses = calloc(2, sizeof(void*));
+       if(!addresses)
+               Log_fatal("Not enough memory to allocate addresses");
 
        struct sockaddr_storage* v4address = calloc(1, sizeof(struct sockaddr_storage));
+       if(!v4address)
+               Log_fatal("Not enough memory to allocate IPv4 address");
        v4address->ss_family = AF_INET;
+
        struct sockaddr_storage* v6address = calloc(1, sizeof(struct sockaddr_storage));
+       if(!v6address)
+               Log_fatal("Not enough memory to allocate IPv6 address");
        v6address->ss_family = AF_INET6;
 
 #if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__APPLE__)