Annotation of embedaddon/php/ext/sockets/tests/mcast_ipv6_recv.phpt, revision 1.1.1.1
1.1 misho 1: --TEST--
2: Multicast support: IPv6 receive options
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:
28: if (!defined("MCAST_JOIN_SOURCE_GROUP"))
29: die('skip source operations are unavailable');
30:
31: $so = socket_set_option($s, IPPROTO_IPV6, MCAST_LEAVE_GROUP, array(
32: "group" => 'ff01::114',
33: "interface" => 0,
34: ));
35: $so = socket_set_option($s, IPPROTO_IPV6, MCAST_JOIN_SOURCE_GROUP, array(
36: "group" => 'ff01::114',
37: "interface" => 0,
38: "source" => '2001::dead:beef',
39: ));
40: if ($so === false) {
41: die('skip protocol independent multicast API is unavailable.');
42: }
43:
44: --FILE--
45: <?php
46: include __DIR__."/mcast_helpers.php.inc";
47: $domain = AF_INET6;
48: $level = IPPROTO_IPV6;
49: $interface = 0;
50: $mcastaddr = 'ff01::114';
51: $sblock = "?";
52:
53: echo "creating send socket\n";
54: $sends1 = socket_create($domain, SOCK_DGRAM, SOL_UDP) or die("err");
55: var_dump($sends1);
56:
57: echo "creating receive socket\n";
58: $s = socket_create($domain, SOCK_DGRAM, SOL_UDP) or die("err");
59: var_dump($s);
60: $br = socket_bind($s, '::0', 3000) or die("err");
61: var_dump($br);
62:
63: $so = socket_set_option($s, $level, MCAST_JOIN_GROUP, array(
64: "group" => $mcastaddr,
65: "interface" => $interface,
66: )) or die("err");
67: var_dump($so);
68:
69: $r = socket_sendto($sends1, $m = "testing packet", strlen($m), 0, $mcastaddr, 3000);
70: var_dump($r);
71: checktimeout($s, 500);
72: $r = socket_recvfrom($s, $str, 2000, 0, $from, $fromPort);
73: var_dump($r, $str, $from);
74: $sblock = $from;
75:
76: $r = socket_sendto($sends1, $m = "initial packet", strlen($m), 0, $mcastaddr, 3000);
77: var_dump($r);
78:
79: $i = 0;
80: checktimeout($s, 500);
81: while (($str = socket_read($s, 3000)) !== FALSE) {
82: $i++;
83: echo "$i> ", $str, "\n";
84:
85: if ($i == 1) {
86: echo "leaving group\n";
87: $so = socket_set_option($s, $level, MCAST_LEAVE_GROUP, array(
88: "group" => $mcastaddr,
89: "interface" => $interface,
90: ));
91: var_dump($so);
92: $r = socket_sendto($sends1, $m = "ignored mcast packet", strlen($m), 0, $mcastaddr, 3000);
93: var_dump($r);
94: $r = socket_sendto($sends1, $m = "unicast packet", strlen($m), 0, "::1", 3000);
95: var_dump($r);
96: }
97: if ($i == 2) {
98: echo "re-joining group\n";
99: $so = socket_set_option($s, $level, MCAST_JOIN_GROUP, array(
100: "group" => $mcastaddr,
101: "interface" => $interface,
102: ));
103: var_dump($so);
104: $r = socket_sendto($sends1, $m = "mcast packet", strlen($m), 0, $mcastaddr, 3000);
105: var_dump($r);
106: }
107: if ($i == 3) {
108: echo "blocking source\n";
109: $so = socket_set_option($s, $level, MCAST_BLOCK_SOURCE, array(
110: "group" => $mcastaddr,
111: "interface" => $interface,
112: "source" => $sblock,
113: ));
114: var_dump($so);
115: $r = socket_sendto($sends1, $m = "ignored packet (blocked source)", strlen($m), 0, $mcastaddr, 3000);
116: var_dump($r);
117: $r = socket_sendto($sends1, $m = "unicast packet", strlen($m), 0, "::1", 3000);
118: var_dump($r);
119: }
120: if ($i == 4) {
121: echo "unblocking source\n";
122: $so = socket_set_option($s, $level, MCAST_UNBLOCK_SOURCE, array(
123: "group" => $mcastaddr,
124: "interface" => $interface,
125: "source" => $sblock,
126: ));
127: var_dump($so);
128: $r = socket_sendto($sends1, $m = "mcast packet", strlen($m), 0, $mcastaddr, 3000);
129: var_dump($r);
130: }
131: if ($i == 5) {
132: echo "leaving group\n";
133: $so = socket_set_option($s, $level, MCAST_LEAVE_GROUP, array(
134: "group" => $mcastaddr,
135: "interface" => $interface,
136: ));
137: var_dump($so);
138: $r = socket_sendto($sends1, $m = "ignored mcast packet", strlen($m), 0, $mcastaddr, 3000);
139: var_dump($r);
140: $r = socket_sendto($sends1, $m = "unicast packet", strlen($m), 0, "::1", 3000);
141: var_dump($r);
142: }
143: if ($i == 6) {
144: echo "joining source group\n";
145: $so = socket_set_option($s, $level, MCAST_JOIN_SOURCE_GROUP, array(
146: "group" => $mcastaddr,
147: "interface" => $interface,
148: "source" => $sblock,
149: ));
150: var_dump($so);
151: $r = socket_sendto($sends1, $m = "mcast packet from desired source", strlen($m), 0, $mcastaddr, 3000);
152: var_dump($r);
153: }
154: if ($i == 7) {
155: echo "leaving source group\n";
156: $so = socket_set_option($s, $level, MCAST_LEAVE_SOURCE_GROUP, array(
157: "group" => $mcastaddr,
158: "interface" => $interface,
159: "source" => $sblock,
160: ));
161: var_dump($so);
162: $r = socket_sendto($sends1, $m = "ignored mcast packet", strlen($m), 0, $mcastaddr, 3000);
163: var_dump($r);
164: $r = socket_sendto($sends1, $m = "unicast packet", strlen($m), 0, "::1", 3000);
165: var_dump($r);
166: }
167: if ($i == 8) {
168: /*echo "joining source group\n";
169: $so = socket_set_option($s, $level, MCAST_JOIN_SOURCE_GROUP, array(
170: "group" => $mcastaddr,
171: "interface" => $interface,
172: "source" => $sblock,
173: ));
174: var_dump($so);*/
175: break;
176: }
177:
178: }
179: --EXPECTF--
180: creating send socket
181: resource(%d) of type (Socket)
182: creating receive socket
183: resource(%d) of type (Socket)
184: bool(true)
185: bool(true)
186: int(14)
187: int(14)
188: string(14) "testing packet"
189: string(%d) "%s"
190: int(14)
191: 1> initial packet
192: leaving group
193: bool(true)
194: int(20)
195: int(14)
196: 2> unicast packet
197: re-joining group
198: bool(true)
199: int(12)
200: 3> mcast packet
201: blocking source
202: bool(true)
203: int(31)
204: int(14)
205: 4> unicast packet
206: unblocking source
207: bool(true)
208: int(12)
209: 5> mcast packet
210: leaving group
211: bool(true)
212: int(20)
213: int(14)
214: 6> unicast packet
215: joining source group
216: bool(true)
217: int(32)
218: 7> mcast packet from desired source
219: leaving source group
220: bool(true)
221: int(20)
222: int(14)
223: 8> unicast packet
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>