Annotation of embedaddon/php/ext/sockets/tests/mcast_ipv6_recv_limited.phpt, revision 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>