"$host:$port";
}
+sub unpack_ipv6 ($) {
+ my ($addr) = @_;
+
+ # TODO: support IO::Socket::IP which comes with Perl 5.24
+ # (perl-modules-5.24 in Debian)
+
+ # SpamAssassin and Net::Server use Socket6, so it may be installed
+ # on our system, already:
+ eval { require Socket6 } or return ('???-Socket6-missing', 0);
+
+ my ($port, $host) = Socket6::unpack_sockaddr_in6($addr);
+ $host = Socket6::inet_ntop(Socket6::AF_INET6(), $host);
+ ($host, $port);
+}
+
sub host_with_port ($) {
my ($addr) = @_;
my ($port, $host);
# this eval will die on Unix sockets:
eval {
if (length($addr) >= 28) {
- require Socket6;
- ($port, $host) = Socket6::unpack_sockaddr_in6($addr);
- $host = Socket6::inet_ntop(Socket6::AF_INET6(), $host);
+ ($host, $port) = unpack_ipv6($addr);
$host = "[$host]";
} else {
($port, $host) = Socket::sockaddr_in($addr);
sub master_loop {
pipe(my ($p0, $p1)) or die "failed to create parent-pipe: $!";
pipe(my ($r, $w)) or die "failed to create self-pipe: $!";
+
+ if ($^O eq 'linux') { # 1031: F_SETPIPE_SZ = 1031
+ fcntl($_, 1031, 4096) for ($w, $p1);
+ }
+
IO::Handle::blocking($w, 0);
my $set_workers = $worker_processes;
my @caught;
@listeners = map {
PublicInbox::Listener->new($_, $post_accept)
} @listeners;
- $PublicInbox::EvCleanup::ENABLED = 1;
+ PublicInbox::EvCleanup::enable();
Danga::Socket->EventLoop;
$parent_pipe = undef;
}