1use strict; 2use warnings; 3use Test::More tests => 14; 4 5use Socket qw(:addrinfo AF_INET pack_sockaddr_in inet_aton); 6 7my ( $err, $host, $service ); 8 9( $err, $host, $service ) = getnameinfo( pack_sockaddr_in( 80, inet_aton( "127.0.0.1" ) ), NI_NUMERICHOST|NI_NUMERICSERV ); 10cmp_ok( $err, "==", 0, '$err == 0 for {family=AF_INET,port=80,sinaddr=127.0.0.1}/NI_NUMERICHOST|NI_NUMERICSERV' ); 11cmp_ok( $err, "eq", "", '$err eq "" for {family=AF_INET,port=80,sinaddr=127.0.0.1}/NI_NUMERICHOST|NI_NUMERICSERV' ); 12 13is( $host, "127.0.0.1", '$host is 127.0.0.1 for NH/NS' ); 14is( $service, "80", '$service is 80 for NH/NS' ); 15 16( $err, $host, $service ) = getnameinfo( pack_sockaddr_in( 80, inet_aton( "127.0.0.1" ) ), NI_NUMERICHOST|NI_NUMERICSERV, NIx_NOHOST ); 17is( $host, undef, '$host is undef for NIx_NOHOST' ); 18is( $service, "80", '$service is 80 for NS, NIx_NOHOST' ); 19 20( $err, $host, $service ) = getnameinfo( pack_sockaddr_in( 80, inet_aton( "127.0.0.1" ) ), NI_NUMERICHOST|NI_NUMERICSERV, NIx_NOSERV ); 21is( $host, "127.0.0.1", '$host is undef for NIx_NOSERV' ); 22is( $service, undef, '$service is 80 for NS, NIx_NOSERV' ); 23 24# Probably "localhost" but we'd better ask the system to be sure 25my $expect_host = gethostbyaddr( inet_aton( "127.0.0.1" ), AF_INET ); 26defined $expect_host or $expect_host = "127.0.0.1"; 27 28( $err, $host, $service ) = getnameinfo( pack_sockaddr_in( 80, inet_aton( "127.0.0.1" ) ), NI_NUMERICSERV ); 29cmp_ok( $err, "==", 0, '$err == 0 for {family=AF_INET,port=80,sinaddr=127.0.0.1}/NI_NUMERICSERV' ); 30 31is( $host, $expect_host, "\$host is $expect_host for NS" ); 32is( $service, "80", '$service is 80 for NS' ); 33 34# Probably "www" but we'd better ask the system to be sure 35my $flags = NI_NUMERICHOST; 36my $expect_service = getservbyport( 80, "tcp" ); 37unless( defined $expect_service ) { 38 $expect_service = "80"; 39 $flags |= NI_NUMERICSERV; # don't seem to have a service name 40} 41 42( $err, $host, $service ) = getnameinfo( pack_sockaddr_in( 80, inet_aton( "127.0.0.1" ) ), $flags ); 43cmp_ok( $err, "==", 0, '$err == 0 for {family=AF_INET,port=80,sinaddr=127.0.0.1}/NI_NUMERICHOST[|NI_NUMERICSERV]' ); 44 45is( $host, "127.0.0.1", '$host is 127.0.0.1 for NH' ); 46is( $service, $expect_service, "\$service is $expect_service for NH" ); 47