diff options
author | jorton <jorton@13f79535-47bb-0310-9956-ffa450edef68> | 2016-03-03 12:00:20 +0000 |
---|---|---|
committer | jorton <jorton@13f79535-47bb-0310-9956-ffa450edef68> | 2016-03-03 12:00:20 +0000 |
commit | 564ec1f61faaaccb0c87f37ae4f997c216b7150d (patch) | |
tree | b91ac4cdf4e0722d097b656ca05c480623a76709 /network_io/unix | |
parent | 7087cb8b4790a336dcf63486743abf76e157c080 (diff) | |
download | libapr-564ec1f61faaaccb0c87f37ae4f997c216b7150d.tar.gz |
* 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/trunk@1733451 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'network_io/unix')
-rw-r--r-- | network_io/unix/sockopt.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/network_io/unix/sockopt.c b/network_io/unix/sockopt.c index 8ba553230..26e2271c9 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; } |