about summary refs log tree commit homepage
diff options
context:
space:
mode:
-rw-r--r--lib/PublicInbox/Daemon.pm4
-rw-r--r--t/httpd-unix.t8
2 files changed, 12 insertions, 0 deletions
diff --git a/lib/PublicInbox/Daemon.pm b/lib/PublicInbox/Daemon.pm
index 51562624..a6707e83 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 b3368491..13df676b 100644
--- a/t/httpd-unix.t
+++ b/t/httpd-unix.t
@@ -35,6 +35,14 @@ my $spawn_httpd = sub {
         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) {