Commit | Line | Data |
---|---|---|
93a5d7bf TC |
1 | #!/usr/bin/perl |
2 | ||
3 | use warnings; | |
4 | use strict; | |
5 | ||
6 | use IO::Socket; | |
7 | use IO::Socket::INET; | |
8 | use Socket; | |
9 | use Test::More; | |
10 | use Config; | |
11 | ||
4eb6628c | 12 | plan tests => 9; |
93a5d7bf TC |
13 | |
14 | my $listener = IO::Socket::INET->new(Listen => 1, | |
15 | LocalAddr => '127.0.0.1', | |
16 | Proto => 'tcp'); | |
17 | ok(defined($listener), 'socket created'); | |
18 | ||
19 | my $port = $listener->sockport(); | |
20 | ||
21 | my $p = $listener->protocol(); | |
22 | ok(defined($p), 'protocol defined'); | |
23 | my $d = $listener->sockdomain(); | |
24 | ok(defined($d), 'domain defined'); | |
25 | my $s = $listener->socktype(); | |
26 | ok(defined($s), 'type defined'); | |
27 | ||
28 | SKIP: { | |
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'); | |
4eb6628c TC |
39 | if ($connector) { |
40 | my $buf; | |
41 | # wait for parent to close its end | |
42 | $connector->read($buf, 1); | |
43 | } | |
44 | else { | |
45 | diag "child failed to connect to parent: $@"; | |
46 | } | |
93a5d7bf TC |
47 | exit(0); |
48 | } else {; | |
49 | ok(defined($cpid), 'spawned a child'); | |
50 | } | |
51 | ||
52 | my $new = $listener->accept(); | |
53 | ||
4eb6628c TC |
54 | ok($new, "got a socket from accept") |
55 | or diag "accept failed: $@"; | |
56 | ||
93a5d7bf TC |
57 | is($new->sockdomain(), $d, 'domain match'); |
58 | SKIP: { | |
59 | skip "no Socket::SO_PROTOCOL", 1 if !defined(eval { Socket::SO_PROTOCOL }); | |
60 | is($new->protocol(), $p, 'protocol match'); | |
61 | } | |
62 | SKIP: { | |
63 | skip "no Socket::SO_TYPE", 1 if !defined(eval { Socket::SO_TYPE }); | |
64 | is($new->socktype(), $s, 'type match'); | |
65 | } | |
4eb6628c | 66 | $new->close; |
93a5d7bf TC |
67 | |
68 | wait(); | |
69 | } |