From 87d10254bc3254cfa45b41b7604c25e3d8f0c64a Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Tue, 11 May 2010 17:20:32 +0000 Subject: [PATCH] use IPV6_ONLY when binding sockets --- src/arm/gnunet-service-manager.c | 11 +++++++++++ src/arm/test_arm_api.c | 2 +- src/arm/test_arm_api_data.conf | 1 - src/util/server.c | 19 ++++++++++++++----- 4 files changed, 26 insertions(+), 7 deletions(-) diff --git a/src/arm/gnunet-service-manager.c b/src/arm/gnunet-service-manager.c index 79a5e5043..5a8cd58d2 100644 --- a/src/arm/gnunet-service-manager.c +++ b/src/arm/gnunet-service-manager.c @@ -675,6 +675,14 @@ createListeningSocket (struct sockaddr *sa, (sock, SOL_SOCKET, SO_REUSEADDR, &on, sizeof (on)) != GNUNET_OK) GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, "setsockopt"); +#ifdef IPV6_V6ONLY + if ( (sa->sa_family == AF_INET6) && + (GNUNET_NETWORK_socket_setsockopt + (sock, IPPROTO_IPV6, IPV6_V6ONLY, &on, sizeof (on)) != GNUNET_OK)) + GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, + "setsockopt"); +#endif + if (GNUNET_NETWORK_socket_bind (sock, (const struct sockaddr *) sa, addr_len) != GNUNET_OK) { @@ -693,6 +701,9 @@ createListeningSocket (struct sockaddr *sa, GNUNET_free (sa); return; } + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + _("ARM now monitors connections to service `%s'\n"), + serviceName); serviceListeningInfo = GNUNET_malloc (sizeof (struct ServiceListeningInfo)); serviceListeningInfo->serviceName = GNUNET_strdup (serviceName); serviceListeningInfo->service_addr = sa; diff --git a/src/arm/test_arm_api.c b/src/arm/test_arm_api.c index 66201aebe..e6335c64c 100644 --- a/src/arm/test_arm_api.c +++ b/src/arm/test_arm_api.c @@ -34,7 +34,7 @@ #define START_ARM GNUNET_YES -#define START_TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MILLISECONDS, 50) +#define START_TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MILLISECONDS, 500) #define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 15) diff --git a/src/arm/test_arm_api_data.conf b/src/arm/test_arm_api_data.conf index 17a8ac613..d4e8d6dbd 100644 --- a/src/arm/test_arm_api_data.conf +++ b/src/arm/test_arm_api_data.conf @@ -22,4 +22,3 @@ CONFIG = $DEFAULTCONFIG BINARY = mockup-service ACCEPT_FROM = 127.0.0.1; ACCEPT_FROM6 = ::1; -ALLOW_SHUTDOWN = YES diff --git a/src/util/server.c b/src/util/server.c index 832f4ed58..131c7c5c1 100644 --- a/src/util/server.c +++ b/src/util/server.c @@ -386,11 +386,20 @@ open_listen_socket (const struct sockaddr *serverAddr, socklen_t socklen) errno = 0; return NULL; } - if ((port != 0) && - (GNUNET_NETWORK_socket_setsockopt - (sock, SOL_SOCKET, SO_REUSEADDR, &on, sizeof (on)) != GNUNET_OK)) - GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, - "setsockopt"); + if (port != 0) + { + if (GNUNET_NETWORK_socket_setsockopt + (sock, SOL_SOCKET, SO_REUSEADDR, &on, sizeof (on)) != GNUNET_OK) + GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, + "setsockopt"); +#ifdef IPV6_V6ONLY + if ( (serverAddr->sa_family == AF_INET6) && + (GNUNET_NETWORK_socket_setsockopt + (sock, IPPROTO_IPV6, IPV6_V6ONLY, &on, sizeof (on)) != GNUNET_OK) ) + GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, + "setsockopt"); +#endif + } /* bind the socket */ if (GNUNET_NETWORK_socket_bind (sock, serverAddr, socklen) != GNUNET_OK) { -- 2.25.1