summaryrefslogtreecommitdiff
path: root/network_io
diff options
context:
space:
mode:
authorpquerna <pquerna@13f79535-47bb-0310-9956-ffa450edef68>2004-12-11 09:45:06 +0000
committerpquerna <pquerna@13f79535-47bb-0310-9956-ffa450edef68>2004-12-11 09:45:06 +0000
commit325cb415d1588a1a43761c3cb0ddd6fa34c889da (patch)
treefa6d1a43132539e815001bcb56a2866d391ef5ee /network_io
parent27ba830957e2ede777f19c6390ab7e6d9d445794 (diff)
downloadlibapr-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.c15
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) {