This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Unit tests for Socket::getaddrinfo() and Socket::getnameinfo()
[perl5.git] / ext / Socket / t / getnameinfo.t
1 use strict;
2 use warnings;
3 use Test::More tests => 10;
4
5 use Socket qw(
6    AF_INET NI_NUMERICHOST NI_NUMERICSERV
7    getnameinfo pack_sockaddr_in inet_aton
8 );
9
10 my ( $err, $host, $service );
11
12 ( $err, $host, $service ) = getnameinfo( pack_sockaddr_in( 80, inet_aton( "127.0.0.1" ) ), NI_NUMERICHOST|NI_NUMERICSERV );
13 cmp_ok( $err, "==", 0, '$err == 0 for {family=AF_INET,port=80,sinaddr=127.0.0.1}/NI_NUMERICHOST|NI_NUMERICSERV' );
14 cmp_ok( $err, "eq", "", '$err eq "" for {family=AF_INET,port=80,sinaddr=127.0.0.1}/NI_NUMERICHOST|NI_NUMERICSERV' );
15
16 is( $host, "127.0.0.1", '$host is 127.0.0.1 for NH/NS' );
17 is( $service, "80", '$service is 80 for NH/NS' );
18
19 # Probably "localhost" but we'd better ask the system to be sure
20 my $expect_host = gethostbyaddr( inet_aton( "127.0.0.1" ), AF_INET );
21 defined $expect_host or $expect_host = "127.0.0.1";
22
23 ( $err, $host, $service ) = getnameinfo( pack_sockaddr_in( 80, inet_aton( "127.0.0.1" ) ), NI_NUMERICSERV );
24 cmp_ok( $err, "==", 0, '$err == 0 for {family=AF_INET,port=80,sinaddr=127.0.0.1}/NI_NUMERICSERV' );
25
26 is( $host, $expect_host, "\$host is $expect_host for NS" );
27 is( $service, "80", '$service is 80 for NS' );
28
29 # Probably "www" but we'd better ask the system to be sure
30 my $expect_service = getservbyport( 80, "tcp" );
31 defined $expect_service or $expect_service = "80";
32
33 ( $err, $host, $service ) = getnameinfo( pack_sockaddr_in( 80, inet_aton( "127.0.0.1" ) ), NI_NUMERICHOST );
34 cmp_ok( $err, "==", 0, '$err == 0 for {family=AF_INET,port=80,sinaddr=127.0.0.1}/NI_NUMERICHOST' );
35
36 is( $host, "127.0.0.1", '$host is 127.0.0.1 for NH' );
37 is( $service, $expect_service, "\$service is $expect_service for NH" );