xref: /onnv-gate/usr/src/cmd/perl/5.8.4/distrib/ext/IO/t/io_udp.t (revision 0:68f95e015346)
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