xref: /openbsd-src/gnu/usr.bin/perl/cpan/Socket/t/getnameinfo.t (revision f2da64fbbbf1b03f09f390ab01267c93dfd77c4c)
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