11 use Errno qw( EINPROGRESS EWOULDBLOCK ECONNREFUSED );
13 # Chris Williams (BINGOS) has offered cpanidx.org as a TCP testing server here
14 my $test_host = "cpanidx.org";
15 my $test_good_port = 80;
16 my $test_bad_port = 6666;
19 IO::Socket::INET->new(
20 PeerHost => $test_host,
21 PeerPort => $test_good_port,
24 ) or skip "Can't connect to $test_host:$test_good_port", 5;
26 my $socket = IO::Socket::IP->new(
27 PeerHost => $test_host,
28 PeerService => $test_good_port,
33 ok( defined $socket, "defined \$socket for $test_host:$test_good_port" ) or
34 diag( " error was $@" );
36 ok( defined $socket->fileno, '$socket has fileno' );
38 ok( !$socket->connected, '$socket not yet connected' );
40 while( !$socket->connect and ( $! == EINPROGRESS || $! == EWOULDBLOCK ) ) {
42 vec( $wvec, fileno $socket, 1 ) = 1;
44 vec( $evec, fileno $socket, 1 ) = 1;
46 my $ret = select( undef, $wvec, $evec, 60 );
47 defined $ret or die "Cannot select() - $!";
48 $ret or die "select() timed out";
51 ok( !$!, '->connect eventually succeeds' );
53 ok( $socket->connected, '$socket now connected' );
57 IO::Socket::INET->new(
58 PeerHost => $test_host,
59 PeerPort => $test_bad_port,
62 ) and skip "Connecting to $test_host:$test_bad_port succeeds", 4;
63 $! == ECONNREFUSED or skip "Connecting to $test_host:$test_bad_port doesn't give ECONNREFUSED", 4;
65 my $socket = IO::Socket::IP->new(
66 PeerHost => $test_host,
67 PeerService => $test_bad_port,
72 ok( defined $socket, "defined \$socket for $test_host:$test_bad_port" ) or
73 diag( " error was $@" );
75 ok( defined $socket->fileno, '$socket has fileno' );
77 ok( !$socket->connected, '$socket not yet connected' );
79 while( !$socket->connect and ( $! == EINPROGRESS || $! == EWOULDBLOCK ) ) {
81 vec( $wvec, fileno $socket, 1 ) = 1;
83 vec( $evec, fileno $socket, 1 ) = 1;
85 my $ret = select( undef, $wvec, $evec, 60 );
86 defined $ret or die "Cannot select() - $!";
87 $ret or die "select() timed out";
92 ok( $dollarbang == ECONNREFUSED, '->connect eventually fails with ECONNREFUSED' ) or
93 diag( " dollarbang = $dollarbang" );