use strict; BEGIN { if ($ENV{PERL_CORE}) { unless ($ENV{PERL_TEST_Net_Ping}) { print "1..0 # Skip: network dependent test\n"; exit; } } unless (eval "require Socket") { print "1..0 \# Skip: no Socket\n"; exit; } if (my $port = getservbyname('echo', 'tcp')) { socket(*ECHO, &Socket::PF_INET(), &Socket::SOCK_STREAM(), (getprotobyname 'tcp')[2]); unless (connect(*ECHO, scalar &Socket::sockaddr_in($port, &Socket::inet_aton("localhost")))) { print "1..0 \# Skip: loopback tcp echo service is off ($!)\n"; exit; } close (*ECHO); } else { print "1..0 \# Skip: no echo port\n"; exit; } } # Test of stream protocol using loopback interface. # # NOTE: # The echo service must be enabled on localhost # to really test the stream protocol ping. See # the end of this document on how to enable it. use Test::More tests => 22; use Net::Ping; my $p = new Net::Ping "stream"; # new() worked? isa_ok($p, 'Net::Ping', 'new() worked'); is($p->ping("localhost"), 1, 'Attempt to connect to the echo port'); for (1..20) { select (undef,undef,undef,0.1); is($p->ping("localhost"), 1, 'Try several pings while it is connected'); } __END__ A simple xinetd configuration to enable the echo service can easily be made. Just create the following file before restarting xinetd: /etc/xinetd.d/echo: # description: An echo server. service echo { type = INTERNAL id = echo-stream socket_type = stream protocol = tcp user = root wait = no disable = no } Or if you are using inetd, before restarting, add this line to your /etc/inetd.conf: echo stream tcp nowait root internal