1#!/usr/bin/perl
2
3use warnings;
4use strict;
5
6use IO::Socket;
7use IO::Socket::INET;
8use Socket;
9use Test::More;
10use Config;
11
12plan tests => 8;
13
14my $listener = IO::Socket::INET->new(Listen => 1,
15                                     LocalAddr => '127.0.0.1',
16                                     Proto => 'tcp');
17ok(defined($listener), 'socket created');
18
19my $port = $listener->sockport();
20
21my $p = $listener->protocol();
22ok(defined($p), 'protocol defined');
23my $d = $listener->sockdomain();
24ok(defined($d), 'domain defined');
25my $s = $listener->socktype();
26ok(defined($s), 'type defined');
27
28SKIP: {
29    skip "fork not available", 4
30	unless $Config{d_fork} || $Config{d_pseudofork};
31
32    my $cpid = fork();
33    if (0 == $cpid) {
34	# the child:
35	sleep(1);
36	my $connector = IO::Socket::INET->new(PeerAddr => '127.0.0.1',
37					      PeerPort => $port,
38					      Proto => 'tcp');
39	exit(0);
40    } else {;
41	    ok(defined($cpid), 'spawned a child');
42    }
43
44    my $new = $listener->accept();
45
46    is($new->sockdomain(), $d, 'domain match');
47  SKIP: {
48      skip "no Socket::SO_PROTOCOL", 1 if !defined(eval { Socket::SO_PROTOCOL });
49      is($new->protocol(), $p, 'protocol match');
50    }
51  SKIP: {
52      skip "no Socket::SO_TYPE", 1 if !defined(eval { Socket::SO_TYPE });
53      is($new->socktype(), $s, 'type match');
54    }
55
56    wait();
57}
58