diff options
author | pquerna <pquerna@13f79535-47bb-0310-9956-ffa450edef68> | 2004-12-11 09:45:06 +0000 |
---|---|---|
committer | pquerna <pquerna@13f79535-47bb-0310-9956-ffa450edef68> | 2004-12-11 09:45:06 +0000 |
commit | 325cb415d1588a1a43761c3cb0ddd6fa34c889da (patch) | |
tree | fa6d1a43132539e815001bcb56a2866d391ef5ee /network_io | |
parent | 27ba830957e2ede777f19c6390ab7e6d9d445794 (diff) | |
download | libapr-325cb415d1588a1a43761c3cb0ddd6fa34c889da.tar.gz |
Add support for Linux's TCP_DEFER_ACCEPT. Sort of like FreeBSD's accept filters, except defer accept isn't documented, anywhere.
git-svn-id: http://svn.apache.org/repos/asf/apr/apr/trunk@111595 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'network_io')
-rw-r--r-- | network_io/unix/sockopt.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/network_io/unix/sockopt.c b/network_io/unix/sockopt.c index 036215f61..35eade085 100644 --- a/network_io/unix/sockopt.c +++ b/network_io/unix/sockopt.c @@ -199,6 +199,21 @@ apr_status_t apr_socket_opt_set(apr_socket_t *sock, return APR_ENOTIMPL; #endif break; + case APR_TCP_DEFER_ACCEPT: +#if defined(TCP_DEFER_ACCEPT) + if (apr_is_option_set(sock, APR_TCP_DEFER_ACCEPT) != on) { + int optlevel = IPPROTO_TCP; + int optname = TCP_DEFER_ACCEPT; + + if (setsockopt(sock->socketdes, optlevel, optname, + (void *)&on, sizeof(int)) == -1) { + return errno; + } + apr_set_option(sock, APR_TCP_DEFER_ACCEPT, on); + } +#else + return APR_ENOTIMPL; +#endif case APR_TCP_NODELAY: #if defined(TCP_NODELAY) if (apr_is_option_set(sock, APR_TCP_NODELAY) != on) { |