1#!./perl 2 3BEGIN { 4 unless(grep /blib/, @INC) { 5 chdir 't' if -d 't'; 6 @INC = '../lib'; 7 } 8} 9 10use Config; 11 12BEGIN { 13 if(-d "lib" && -f "TEST") { 14 my $reason; 15 16 if ($Config{'extensions'} !~ /\bSocket\b/) { 17 $reason = 'Socket was not built'; 18 } 19 elsif ($Config{'extensions'} !~ /\bIO\b/) { 20 $reason = 'IO was not built'; 21 } 22 elsif ($^O eq 'apollo') { 23 $reason = "unknown *FIXME*"; 24 } 25 undef $reason if $^O eq 'VMS' and $Config{d_socket}; 26 if ($reason) { 27 print "1..0 # Skip: $reason\n"; 28 exit 0; 29 } 30 } 31} 32 33sub compare_addr { 34 no utf8; 35 my $a = shift; 36 my $b = shift; 37 if (length($a) != length $b) { 38 my $min = (length($a) < length $b) ? length($a) : length $b; 39 if ($min and substr($a, 0, $min) eq substr($b, 0, $min)) { 40 printf "# Apparently: %d bytes junk at the end of %s\n# %s\n", 41 abs(length($a) - length ($b)), 42 $_[length($a) < length ($b) ? 1 : 0], 43 "consider decreasing bufsize of recfrom."; 44 substr($a, $min) = ""; 45 substr($b, $min) = ""; 46 } 47 return 0; 48 } 49 my @a = unpack_sockaddr_in($a); 50 my @b = unpack_sockaddr_in($b); 51 "$a[0]$a[1]" eq "$b[0]$b[1]"; 52} 53 54$| = 1; 55print "1..7\n"; 56 57use Socket; 58use IO::Socket qw(AF_INET SOCK_DGRAM INADDR_ANY); 59 60$udpa = IO::Socket::INET->new(Proto => 'udp', LocalAddr => 'localhost') 61 || IO::Socket::INET->new(Proto => 'udp', LocalAddr => '127.0.0.1') 62 or die "$! (maybe your system does not have a localhost at all, 'localhost' or 127.0.0.1)"; 63 64print "ok 1\n"; 65 66$udpb = IO::Socket::INET->new(Proto => 'udp', LocalAddr => 'localhost') 67 || IO::Socket::INET->new(Proto => 'udp', LocalAddr => '127.0.0.1') 68 or die "$! (maybe your system does not have a localhost at all, 'localhost' or 127.0.0.1)"; 69 70print "ok 2\n"; 71 72$udpa->send("ok 4\n",0,$udpb->sockname); 73 74print "not " 75 unless compare_addr($udpa->peername,$udpb->sockname, 'peername', 'sockname'); 76print "ok 3\n"; 77 78my $where = $udpb->recv($buf="",5); 79print $buf; 80 81my @xtra = (); 82 83unless(compare_addr($where,$udpa->sockname, 'recv name', 'sockname')) { 84 print "not "; 85 @xtra = (0,$udpa->sockname); 86} 87print "ok 5\n"; 88 89$udpb->send("ok 6\n",@xtra); 90$udpa->recv($buf="",5); 91print $buf; 92 93print "not " if $udpa->connected; 94print "ok 7\n"; 95