From fbcd2b5eb401a8e1811d803cef9b1c156acb50f6 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Mon, 24 Jun 2019 02:52:54 +0000 Subject: daemon: use FreeBSD accept filters on non-NNTP Similar to TCP_DEFER_ACCEPT on Linux, FreeBSD has a 'dataready' accept filter which we can use to reduce wakeups when doing TLS negotiation or plain HTTP. There's also a 'httpready' which we can use for plain HTTP connections. --- t/httpd.t | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 't/httpd.t') diff --git a/t/httpd.t b/t/httpd.t index 8c2a3173..e085c4b9 100644 --- a/t/httpd.t +++ b/t/httpd.t @@ -106,6 +106,16 @@ SKIP: { defined(my $x = getsockopt($sock, IPPROTO_TCP, $var)) or die; ok(unpack('i', $x) > 0, 'TCP_DEFER_ACCEPT set'); }; +SKIP: { + skip 'SO_ACCEPTFILTER is FreeBSD-only', 1 if $^O ne 'freebsd'; + if (system('kldstat -m accf_http >/dev/null') != 0) { + skip 'accf_http not loaded: kldload accf_http', 1; + } + require PublicInbox::Daemon; + my $var = PublicInbox::Daemon::SO_ACCEPTFILTER(); + my $x = getsockopt($sock, SOL_SOCKET, $var); + like($x, qr/\Ahttpready\0+\z/, 'got httpready accf for HTTP'); +}; done_testing(); -- cgit v1.2.3-24-ge0c7