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