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;
use Net::Ping;
plan tests => 22;
my $p = new Net::Ping "stream";
# new() worked?
ok !!$p;
# Attempt to connect to the echo port
ok ($p -> ping("localhost"));
# Try several pings while it is connected
for (1..20) {
select (undef,undef,undef,0.1);
ok $p -> ping("localhost");
}
__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