4 require Config; import Config;
5 if ($Config{'extensions'} !~ /\bSocket\b/ &&
6 !(($^O eq 'VMS') && $Config{d_socket})) {
10 $has_alarm = $Config{d_alarm};
14 use Test::More tests => 6;
16 $has_echo = $^O ne 'MSWin32';
18 sub arm { $alarmed = 0; alarm(shift) if $has_alarm }
19 sub alarmed { $alarmed = 1 }
20 $SIG{ALRM} = 'alarmed' if $has_alarm;
23 unless(socket(T, PF_INET, SOCK_STREAM, IPPROTO_TCP)) {
27 pass "socket(PF_INET)";
30 my $host = $^O eq 'MacOS' || ($^O eq 'irix' && $Config{osvers} == 5) ?
31 '127.0.0.1' : 'localhost';
32 my $localhost = inet_aton($host);
35 unless($has_echo && defined $localhost && connect(T,pack_sockaddr_in(7,$localhost))) {
36 skip "Unable to connect to localhost:7", 2;
41 pass "PF_INET echo localhost connected";
43 diag "Connected to " .
44 inet_ntoa((unpack_sockaddr_in(getpeername(T)))[1])."\n";
47 syswrite(T,"hello",5);
51 $read = sysread(T,$buff,10); # Connection may be granted, then closed!
54 while ($read > 0 && length($buff) < 5) {
55 # adjust for fact that TCP doesn't guarantee size of reads/writes
57 $read = sysread(T,$buff,10,length($buff));
61 ok(($read == 0 || $buff eq "hello"), "PF_INET echo localhost reply");
66 unless(socket(S, PF_INET, SOCK_STREAM, IPPROTO_TCP)) {
70 pass "socket(PF_INET)";
74 unless($has_echo && connect(S,pack_sockaddr_in(7,INADDR_LOOPBACK))) {
75 skip "Unable to connect to localhost:7", 2;
80 pass "PF_INET echo INADDR_LOOPBACK connected";
82 diag "Connected to " .
83 inet_ntoa((unpack_sockaddr_in(getpeername(S)))[1])."\n";
86 syswrite(S,"olleh",5);
90 $read = sysread(S,$buff,10); # Connection may be granted, then closed!
93 while ($read > 0 && length($buff) < 5) {
94 # adjust for fact that TCP doesn't guarantee size of reads/writes
96 $read = sysread(S,$buff,10,length($buff));
100 ok(($read == 0 || $buff eq "olleh"), "PF_INET echo INADDR_LOOPBACK reply");