summaryrefslogtreecommitdiff
path: root/network_io
diff options
context:
space:
mode:
authortrawick <trawick@13f79535-47bb-0310-9956-ffa450edef68>2002-11-13 23:47:30 +0000
committertrawick <trawick@13f79535-47bb-0310-9956-ffa450edef68>2002-11-13 23:47:30 +0000
commit2ce59d7ffd962908289a426bdd24ecf929280be6 (patch)
treee2a3ee3f617643ae09b8a29a5c5b019954c8d635 /network_io
parentbd7ce3484dd18373c5f6c4476cc0d209256586b6 (diff)
downloadlibapr-2ce59d7ffd962908289a426bdd24ecf929280be6.tar.gz
add APR_IPV6_V6ONLY socket option
git-svn-id: http://svn.apache.org/repos/asf/apr/apr/trunk@64019 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'network_io')
-rw-r--r--network_io/unix/sockopt.c14
-rw-r--r--network_io/win32/sockopt.c14
2 files changed, 28 insertions, 0 deletions
diff --git a/network_io/unix/sockopt.c b/network_io/unix/sockopt.c
index 41ed14746..31024a8aa 100644
--- a/network_io/unix/sockopt.c
+++ b/network_io/unix/sockopt.c
@@ -310,6 +310,20 @@ apr_status_t apr_socket_opt_set(apr_socket_t *sock,
if (opt & APR_INCOMPLETE_READ) {
apr_set_option(&sock->netmask, APR_INCOMPLETE_READ, on);
}
+ if (opt & APR_IPV6_V6ONLY) {
+#if APR_HAVE_IPV6 && defined(IPV6_V6ONLY)
+ /* we don't know the initial setting of this option,
+ * so don't check/set sock->netmask since that optimization
+ * won't work
+ */
+ if (setsockopt(sock->socketdes, IPPROTO_IPV6, IPV6_V6ONLY,
+ (void *)&on, sizeof(int)) == -1) {
+ return errno;
+ }
+#else
+ return APR_ENOTIMPL;
+#endif
+ }
return APR_SUCCESS;
}
diff --git a/network_io/win32/sockopt.c b/network_io/win32/sockopt.c
index 53f633265..c326f9dae 100644
--- a/network_io/win32/sockopt.c
+++ b/network_io/win32/sockopt.c
@@ -210,6 +210,20 @@ APR_DECLARE(apr_status_t) apr_socket_opt_set(apr_socket_t *sock,
apr_set_option(&sock->netmask, APR_TCP_NODELAY, on);
}
break;
+ case APR_IPV6_V6ONLY:
+#if APR_HAVE_IPV6 && defined(IPV6_V6ONLY)
+ /* we don't know the initial setting of this option,
+ * so don't check/set sock->netmask since that optimization
+ * won't work
+ */
+ if (setsockopt(sock->socketdes, IPPROTO_IPV6, IPV6_V6ONLY,
+ (void *)&on, sizeof(int)) == -1) {
+ return apr_get_netos_error();
+ }
+#else
+ return APR_ENOTIMPL;
+#endif
+ break;
default:
return APR_EINVAL;
break;