@@ -7,10 +7,7 @@ use warnings;
77
88our $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 ();
1411use IO::Socket::IP;
1512our @ISA = qw( IO::Socket::IP) ;
1613
@@ -48,48 +45,13 @@ sub accept {
4845
4946sub 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