lib/PublicInbox/Daemon.pm | 4 ++++ t/httpd-unix.t | 8 ++++++++ diff --git a/lib/PublicInbox/Daemon.pm b/lib/PublicInbox/Daemon.pm index 51562624847852f56abeb4cab5c15f3ec0a88d6e..a6707e832621812c055ec380a07b527b3e7be0d2 100644 --- a/lib/PublicInbox/Daemon.pm +++ b/lib/PublicInbox/Daemon.pm @@ -185,6 +185,10 @@ sub sockname ($) { my ($s) = @_; my $addr = getsockname($s) or return; my ($host, $port) = host_with_port($addr); + if ($port == 0 && $host eq '127.0.0.1') { + my ($path) = Socket::sockaddr_un($addr); + return $path; + } "$host:$port"; } diff --git a/t/httpd-unix.t b/t/httpd-unix.t index b3368491b14bb892efa813e790999fff92155486..13df676b5fcf361a60493acfbf6aa9b440981ea2 100644 --- a/t/httpd-unix.t +++ b/t/httpd-unix.t @@ -35,6 +35,14 @@ } ok(defined $pid, 'forked httpd process successfully'); }; +{ + require PublicInbox::Daemon; + my $l = "$tmpdir/named.sock"; + my $s = IO::Socket::UNIX->new(Listen => 5, Local => $l, + Type => SOCK_STREAM); + is(PublicInbox::Daemon::sockname($s), $l, 'sockname works for UNIX'); +} + ok(!-S $unix, 'UNIX socket does not exist, yet'); $spawn_httpd->("-l$unix"); for (1..1000) {