Annotation of embedaddon/php/ext/sockets/tests/mcast_ipv6_recv_limited.phpt, revision 1.1.1.1
1.1 misho 1: --TEST--
2: Multicast support: IPv6 receive options (limited)
3: --SKIPIF--
4: <?php
5: if (!extension_loaded('sockets')) {
6: die('skip sockets extension not available.');
7: }
8: if (!defined('IPPROTO_IPV6')) {
9: die('skip IPv6 not available.');
10: }
11: $s = socket_create(AF_INET6, SOCK_DGRAM, SOL_UDP);
12: $br = socket_bind($s, '::', 3000);
13: /* On Linux, there is no route ff00::/8 by default on lo, which makes it
14: * troublesome to send multicast traffic from lo, which we must since
15: * we're dealing with interface-local traffic... */
16: $so = socket_set_option($s, IPPROTO_IPV6, MCAST_JOIN_GROUP, array(
17: "group" => 'ff01::114',
18: "interface" => 0,
19: ));
20: if ($so === false) {
21: die('skip unable to join multicast group on any interface.');
22: }
23: $r = socket_sendto($s, $m = "testing packet", strlen($m), 0, 'ff01::114', 3000);
24: if ($r === false) {
25: die('skip unable to send multicast packet.');
26: }
27: $so = socket_set_option($s, IPPROTO_IPV6, MCAST_LEAVE_GROUP, array(
28: "group" => 'ff01::114',
29: "interface" => 0,
30: ));
31: if (defined("MCAST_JOIN_SOURCE_GROUP")) {
32: $so = socket_set_option($s, IPPROTO_IPV6, MCAST_JOIN_SOURCE_GROUP, array(
33: "group" => 'ff01::114',
34: "interface" => 0,
35: "source" => '2001::dead:beef',
36: ));
37: if ($so !== false) {
38: die('skip protocol independent multicast API is available.');
39: }
40: }
41:
42: --FILE--
43: <?php
44: include __DIR__."/mcast_helpers.php.inc";
45: $domain = AF_INET6;
46: $level = IPPROTO_IPV6;
47: $interface = 0;
48: $mcastaddr = 'ff01::114';
49: $sblock = "?";
50:
51: echo "creating send socket\n";
52: $sends1 = socket_create($domain, SOCK_DGRAM, SOL_UDP) or die("err");
53: var_dump($sends1);
54:
55: echo "creating receive socket\n";
56: $s = socket_create($domain, SOCK_DGRAM, SOL_UDP) or die("err");
57: var_dump($s);
58: $br = socket_bind($s, '::0', 3000) or die("err");
59: var_dump($br);
60:
61: $so = socket_set_option($s, $level, MCAST_JOIN_GROUP, array(
62: "group" => $mcastaddr,
63: "interface" => $interface,
64: )) or die("err");
65: var_dump($so);
66:
67: $r = socket_sendto($sends1, $m = "testing packet", strlen($m), 0, $mcastaddr, 3000);
68: var_dump($r);
69: checktimeout($s, 500);
70: $r = socket_recvfrom($s, $str, 2000, 0, $from, $fromPort);
71: var_dump($r, $str, $from);
72: $sblock = $from;
73:
74: $r = socket_sendto($sends1, $m = "initial packet", strlen($m), 0, $mcastaddr, 3000);
75: var_dump($r);
76:
77: $i = 0;
78: checktimeout($s, 500);
79: while (($str = socket_read($s, 3000, 500)) !== FALSE) {
80: $i++;
81: echo "$i> ", $str, "\n";
82:
83: if ($i == 1) {
84: echo "leaving group\n";
85: $so = socket_set_option($s, $level, MCAST_LEAVE_GROUP, array(
86: "group" => $mcastaddr,
87: "interface" => $interface,
88: ));
89: var_dump($so);
90: $r = socket_sendto($sends1, $m = "ignored mcast packet", strlen($m), 0, $mcastaddr, 3000);
91: var_dump($r);
92: $r = socket_sendto($sends1, $m = "unicast packet", strlen($m), 0, "::1", 3000);
93: var_dump($r);
94: }
95: if ($i == 2) {
96: echo "re-joining group\n";
97: $so = socket_set_option($s, $level, MCAST_JOIN_GROUP, array(
98: "group" => $mcastaddr,
99: "interface" => $interface,
100: ));
101: var_dump($so);
102: $r = socket_sendto($sends1, $m = "mcast packet", strlen($m), 0, $mcastaddr, 3000);
103: var_dump($r);
104: }
105: if ($i == 3) {
106: break;
107: }
108:
109: }
110: --EXPECTF--
111: creating send socket
112: resource(%d) of type (Socket)
113: creating receive socket
114: resource(%d) of type (Socket)
115: bool(true)
116: bool(true)
117: int(14)
118: int(14)
119: string(14) "testing packet"
120: string(%d) "%s"
121: int(14)
122: 1> initial packet
123: leaving group
124: bool(true)
125: int(20)
126: int(14)
127: 2> unicast packet
128: re-joining group
129: bool(true)
130: int(12)
131: 3> mcast packet
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>