summaryrefslogtreecommitdiff
path: root/network_io
diff options
context:
space:
mode:
authorjorton <jorton@13f79535-47bb-0310-9956-ffa450edef68>2016-03-03 12:03:43 +0000
committerjorton <jorton@13f79535-47bb-0310-9956-ffa450edef68>2016-03-03 12:03:43 +0000
commit8616767b6ac659b50acdc044983a32f67de5ce21 (patch)
tree308dae9380e209ab8ef6d9f20ff82ea5868c11c7 /network_io
parentceefba0f2ceff11b30efe3dcfc05bab4e3fcf12b (diff)
downloadlibapr-8616767b6ac659b50acdc044983a32f67de5ce21.tar.gz
Merge 1733451 from trunk:
* include/apr_network_io.h (APR_SO_FREEBIND): Add option. * network_io/unix/sockopt.c (apr_socket_opt_set): Implement APR_SO_FREEBIND on Linux with IP_FREEBIND * test/testsock.c (test_freebind): Add test case. Submitted by: Ashley GC, jkaluza, jorton git-svn-id: http://svn.apache.org/repos/asf/apr/apr/branches/1.6.x@1733452 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'network_io')
-rw-r--r--network_io/unix/sockopt.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/network_io/unix/sockopt.c b/network_io/unix/sockopt.c
index 7c2b4875f..2b2af5e2a 100644
--- a/network_io/unix/sockopt.c
+++ b/network_io/unix/sockopt.c
@@ -330,6 +330,20 @@ apr_status_t apr_socket_opt_set(apr_socket_t *sock,
return APR_ENOTIMPL;
#endif
break;
+ case APR_SO_FREEBIND:
+#if defined(IP_FREEBIND)
+ if (setsockopt(sock->socketdes, SOL_IP, IP_FREEBIND,
+ (void *)&one, sizeof(int)) == -1) {
+ return errno;
+ }
+ apr_set_option(sock, APR_SO_FREEBIND, on);
+#elif defined(IP_BINDANY)
+ /* TODO: insert FreeBSD support here, note family specific
+ * options, IP_BINDANY vs IPV6_BINDANY */
+#else
+ return APR_ENOTIMPL;
+#endif
+ break;
default:
return APR_EINVAL;
}