58 lines
1.3 KiB
Perl
58 lines
1.3 KiB
Perl
#!/usr/bin/perl
|
|
|
|
use warnings;
|
|
use strict;
|
|
|
|
use IO::Socket;
|
|
use IO::Socket::INET;
|
|
use Socket;
|
|
use Test::More;
|
|
use Config;
|
|
|
|
plan tests => 8;
|
|
|
|
my $listener = IO::Socket::INET->new(Listen => 1,
|
|
LocalAddr => '127.0.0.1',
|
|
Proto => 'tcp');
|
|
ok(defined($listener), 'socket created');
|
|
|
|
my $port = $listener->sockport();
|
|
|
|
my $p = $listener->protocol();
|
|
ok(defined($p), 'protocol defined');
|
|
my $d = $listener->sockdomain();
|
|
ok(defined($d), 'domain defined');
|
|
my $s = $listener->socktype();
|
|
ok(defined($s), 'type defined');
|
|
|
|
SKIP: {
|
|
skip "fork not available", 4
|
|
unless $Config{d_fork} || $Config{d_pseudofork};
|
|
|
|
my $cpid = fork();
|
|
if (0 == $cpid) {
|
|
# the child:
|
|
sleep(1);
|
|
my $connector = IO::Socket::INET->new(PeerAddr => '127.0.0.1',
|
|
PeerPort => $port,
|
|
Proto => 'tcp');
|
|
exit(0);
|
|
} else {;
|
|
ok(defined($cpid), 'spawned a child');
|
|
}
|
|
|
|
my $new = $listener->accept();
|
|
|
|
is($new->sockdomain(), $d, 'domain match');
|
|
SKIP: {
|
|
skip "no Socket::SO_PROTOCOL", 1 if !defined(eval { Socket::SO_PROTOCOL });
|
|
is($new->protocol(), $p, 'protocol match');
|
|
}
|
|
SKIP: {
|
|
skip "no Socket::SO_TYPE", 1 if !defined(eval { Socket::SO_TYPE });
|
|
is($new->socktype(), $s, 'type match');
|
|
}
|
|
|
|
wait();
|
|
}
|