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>