unpack_sockaddr_un and unpack_sockaddr_in have been around since
Perl 5.002 in the mid-1990s, so be explicit and use them instead
of relying on wantarray caller context. We'll also omit the
$host check for ($port == 0) since zero is not a valid TCP port.
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";
+ ($port == 0) ? (Socket::unpack_sockaddr_un($addr))[0] : "$host:$port";
}
sub unpack_ipv6 ($) {
($host, $port) = unpack_ipv6($addr);
$host = "[$host]";
} else {
- ($port, $host) = Socket::sockaddr_in($addr);
+ ($port, $host) = Socket::unpack_sockaddr_in($addr);
$host = Socket::inet_ntoa($host);
}
};