]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[805] Socket options and tests for them
authorMichal 'vorner' Vaner <michal.vaner@nic.cz>
Fri, 6 Jan 2012 14:25:23 +0000 (15:25 +0100)
committerMichal 'vorner' Vaner <michal.vaner@nic.cz>
Fri, 6 Jan 2012 14:25:23 +0000 (15:25 +0100)
Added the v6 only flag for IPv6 sockets. Both reuse address and this
flags get tested.

src/bin/sockcreator/sockcreator.cc
src/bin/sockcreator/tests/sockcreator_tests.cc

index 420fde7c7fc9ec518e6a9010571d2979153f311c..c33d9c3445aae6d88f53328eac174ed7f9a4e0cf 100644 (file)
@@ -39,6 +39,10 @@ get_sock(const int type, struct sockaddr *bind_addr, const socklen_t addr_len)
     if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) == -1) {
         return -2; // This is part of the binding process, so it's a bind error
     }
+    if (bind_addr->sa_family == AF_INET6 &&
+        setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, &on, sizeof(on)) == -1) {
+        return -2; // This is part of the binding process, so it's a bind error
+    }
     if (bind(sock, bind_addr, addr_len) == -1) {
         return -2;
     }
index 73cbf48df6d63b9df33147f1c4bdce9a4b9d26d8..58f9217e7e34cbefc3c5565b5beeec68c7c8784c 100644 (file)
@@ -59,6 +59,15 @@ namespace {
             #SOCK_TYPE " and family " #ADDR_FAMILY ", failed with " \
             << socket << " and error " << strerror(errno); \
         CHECK_SOCK(ADDR_TYPE, socket); \
+        int on; \
+        socklen_t len(sizeof(on)); \
+        ASSERT_EQ(0, getsockopt(socket, SOL_SOCKET, SO_REUSEADDR, &on, &len));\
+        ASSERT_EQ(1, on); \
+        if (ADDR_FAMILY == AF_INET6) { \
+            ASSERT_EQ(0, getsockopt(socket, IPPROTO_IPV6, IPV6_V6ONLY, &on, \
+                                    &len)); \
+            ASSERT_EQ(1, on); \
+        } \
         EXPECT_EQ(0, close(socket)); \
     } while (0)