Skip to content

Commit 3344fe1

Browse files
committed
prefer ip address for host in $d->url
1 parent 9022b88 commit 3344fe1

1 file changed

Lines changed: 8 additions & 46 deletions

File tree

lib/HTTP/Daemon.pm

Lines changed: 8 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,7 @@ use warnings;
77

88
our $VERSION = '6.07';
99

10-
use Socket qw(
11-
AF_INET AF_INET6 INADDR_ANY IN6ADDR_ANY INADDR_LOOPBACK IN6ADDR_LOOPBACK
12-
inet_ntop sockaddr_family
13-
);
10+
use Socket ();
1411
use IO::Socket::IP;
1512
our @ISA = qw(IO::Socket::IP);
1613

@@ -48,48 +45,13 @@ sub accept {
4845

4946
sub url {
5047
my $self = shift;
51-
my $url = $self->_default_scheme . "://";
52-
my $addr = $self->sockaddr;
53-
if (!$addr || $addr eq INADDR_ANY || $addr eq IN6ADDR_ANY) {
54-
require Sys::Hostname;
55-
$url .= lc Sys::Hostname::hostname();
56-
}
57-
elsif ($addr eq INADDR_LOOPBACK) {
58-
$url .= inet_ntop(AF_INET, $addr);
59-
}
60-
elsif ($addr eq IN6ADDR_LOOPBACK) {
61-
$url .= '[' . inet_ntop(AF_INET6, $addr) . ']';
62-
}
63-
else {
64-
my $host = $self->sockhostname;
65-
66-
# sockhostname() seems to return a stringified IP address if not
67-
# resolvable. Then quote it for a port separator and an IPv6 zone
68-
# separator. But be paranoid for a case when it already contains
69-
# a bracket.
70-
if (defined $host and $host =~ /:/) {
71-
if ($host =~ /[\[\]]/) {
72-
$host = undef;
73-
}
74-
else {
75-
$host =~ s/%/%25/g;
76-
$host = '[' . $host . ']';
77-
}
78-
}
79-
if (!defined $host) {
80-
my $family = sockaddr_family($self->sockname);
81-
if ($family && $family == AF_INET6) {
82-
$host = '[' . inet_ntop(AF_INET6, $addr) . ']';
83-
}
84-
elsif ($family && $family == AF_INET) {
85-
$host = inet_ntop(AF_INET, $addr);
86-
}
87-
else {
88-
die "Unknown family";
89-
}
90-
}
91-
$url .= $host;
92-
}
48+
49+
my $host = $self->sockhost;
50+
$host = "127.0.0.1" if $host eq "0.0.0.0";
51+
$host = "::1" if $host eq "::";
52+
$host = "[$host]" if $self->sockdomain == Socket::AF_INET6;
53+
54+
my $url = $self->_default_scheme . "://" . $host;
9355
my $port = $self->sockport;
9456
$url .= ":$port" if $port != $self->_default_port;
9557
$url .= "/";

0 commit comments

Comments
 (0)