Annotation of embedaddon/php/ext/sockets/tests/mcast_ipv4_recv.phpt, revision 1.1

1.1     ! misho       1: --TEST--
        !             2: Multicast support: IPv4 receive options
        !             3: --SKIPIF--
        !             4: <?php
        !             5: if (!extension_loaded('sockets')) {
        !             6:     die('skip sockets extension not available.');
        !             7: }
        !             8: $s = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
        !             9: $br = socket_bind($s, '0.0.0.0', 3000);
        !            10: $so = socket_set_option($s, IPPROTO_IP, MCAST_JOIN_GROUP, array(
        !            11:        "group" => '224.0.0.23',
        !            12:        "interface" => 'lo',
        !            13: ));
        !            14: if ($so === false) {
        !            15:     die('skip interface \'lo\' is unavailable.');
        !            16: }
        !            17: if (!defined("MCAST_BLOCK_SOURCE")) {
        !            18:     die('skip source operations are unavailable');
        !            19: }
        !            20: --FILE--
        !            21: <?php
        !            22: include __DIR__."/mcast_helpers.php.inc";
        !            23: $domain = AF_INET;
        !            24: $level = IPPROTO_IP;
        !            25: $interface = "lo";
        !            26: $mcastaddr = '224.0.0.23';
        !            27: $sblock = "127.0.0.1";
        !            28: 
        !            29: echo "creating send socket bound to 127.0.0.1\n";
        !            30: $sends1 = socket_create($domain, SOCK_DGRAM, SOL_UDP);
        !            31: $br = socket_bind($sends1, '127.0.0.1');
        !            32: var_dump($br);
        !            33: 
        !            34: echo "creating unbound socket and hoping the routing table causes an interface other than lo to be used for sending messages to $mcastaddr\n";
        !            35: $sends2 = socket_create($domain, SOCK_DGRAM, SOL_UDP);
        !            36: var_dump($br);
        !            37: 
        !            38: echo "creating receive socket\n";
        !            39: $s = socket_create($domain, SOCK_DGRAM, SOL_UDP);
        !            40: var_dump($s);
        !            41: $br = socket_bind($s, '0.0.0.0', 3000);
        !            42: var_dump($br);
        !            43: 
        !            44: $so = socket_set_option($s, $level, MCAST_JOIN_GROUP, array(
        !            45:        "group" => $mcastaddr,
        !            46:        "interface" => $interface,
        !            47: ));
        !            48: var_dump($so);
        !            49: 
        !            50: $r = socket_sendto($sends1, $m = "initial packet", strlen($m), 0, $mcastaddr, 3000);
        !            51: var_dump($r);
        !            52: 
        !            53: $i = 0;
        !            54: checktimeout($s, 500);
        !            55: while (($str = socket_read($s, 3000)) !== FALSE) {
        !            56:        $i++;
        !            57:        echo "$i> ", $str, "\n";
        !            58: 
        !            59: if ($i == 1) {
        !            60:        echo "leaving group\n";
        !            61:        $so = socket_set_option($s, $level, MCAST_LEAVE_GROUP, array(
        !            62:                "group" => $mcastaddr,
        !            63:                "interface" => $interface,
        !            64:        ));
        !            65:        var_dump($so);
        !            66:        $r = socket_sendto($sends1, $m = "ignored mcast packet", strlen($m), 0, $mcastaddr, 3000);
        !            67:        var_dump($r);
        !            68:        $r = socket_sendto($sends1, $m = "unicast packet", strlen($m), 0, "127.0.0.1", 3000);
        !            69:        var_dump($r);
        !            70: }
        !            71: if ($i == 2) {
        !            72:        echo "re-joining group\n";
        !            73:        $so = socket_set_option($s, $level, MCAST_JOIN_GROUP, array(
        !            74:                "group" => $mcastaddr,
        !            75:                "interface" => $interface,
        !            76:        ));
        !            77:        var_dump($so);
        !            78:        $r = socket_sendto($sends2, $m = "ignored mcast packet (different interface)", strlen($m), 0, $mcastaddr, 3000);
        !            79:        var_dump($r);
        !            80:        $r = socket_sendto($sends1, $m = "mcast packet", strlen($m), 0, $mcastaddr, 3000);
        !            81:        var_dump($r);
        !            82: }
        !            83: if ($i == 3) {
        !            84:        echo "blocking source\n";
        !            85:        $so = socket_set_option($s, $level, MCAST_BLOCK_SOURCE, array(
        !            86:                "group" => $mcastaddr,
        !            87:                "interface" => $interface,
        !            88:                "source" => $sblock,
        !            89:        ));
        !            90:        var_dump($so);
        !            91:        $r = socket_sendto($sends1, $m = "ignored packet (blocked source)", strlen($m), 0, $mcastaddr, 3000);
        !            92:        var_dump($r);
        !            93:        $r = socket_sendto($sends1, $m = "unicast packet", strlen($m), 0, "127.0.0.1", 3000);
        !            94:        var_dump($r);
        !            95: }
        !            96: if ($i == 4) {
        !            97:        echo "unblocking source\n";
        !            98:        $so = socket_set_option($s, $level, MCAST_UNBLOCK_SOURCE, array(
        !            99:                "group" => $mcastaddr,
        !           100:                "interface" => $interface,
        !           101:                "source" => $sblock,
        !           102:        ));
        !           103:        var_dump($so);
        !           104:        $r = socket_sendto($sends1, $m = "mcast packet from 127.0.0.1", strlen($m), 0, $mcastaddr, 3000);
        !           105:        var_dump($r);
        !           106: }
        !           107: if ($i == 5) {
        !           108:        echo "leaving group\n";
        !           109:        $so = socket_set_option($s, $level, MCAST_LEAVE_GROUP, array(
        !           110:                "group" => $mcastaddr,
        !           111:                "interface" => $interface,
        !           112:        ));
        !           113:        var_dump($so);
        !           114:        $r = socket_sendto($sends1, $m = "ignored mcast packet", strlen($m), 0, $mcastaddr, 3000);
        !           115:        var_dump($r);
        !           116:        $r = socket_sendto($sends1, $m = "unicast packet", strlen($m), 0, "127.0.0.1", 3000);
        !           117:        var_dump($r);
        !           118: }
        !           119: if ($i == 6) {
        !           120:        echo "joining source group\n";
        !           121:        $so = socket_set_option($s, $level, MCAST_JOIN_SOURCE_GROUP, array(
        !           122:                "group" => $mcastaddr,
        !           123:                "interface" => $interface,
        !           124:                "source" => $sblock,
        !           125:        ));
        !           126:        var_dump($so);
        !           127:        $r = socket_sendto($sends1, $m = "mcast packet from 127.0.0.1", strlen($m), 0, $mcastaddr, 3000);
        !           128:        var_dump($r);
        !           129: }
        !           130: if ($i == 7) {
        !           131:        echo "leaving source group\n";
        !           132:        $so = socket_set_option($s, $level, MCAST_LEAVE_SOURCE_GROUP, array(
        !           133:                "group" => $mcastaddr,
        !           134:                "interface" => $interface,
        !           135:                "source" => $sblock,
        !           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, "127.0.0.1", 3000);
        !           141:        var_dump($r);
        !           142: }
        !           143: if ($i == 8) {
        !           144: /*     echo "rjsg\n";
        !           145:        $so = socket_set_option($s, $level, MCAST_JOIN_GROUP, array(
        !           146:                "group" => $mcastaddr,
        !           147:                "interface" => $interface,
        !           148:        ));
        !           149:        var_dump($so);*/
        !           150:        break;
        !           151: }
        !           152: 
        !           153: }
        !           154: --EXPECTF--
        !           155: creating send socket bound to 127.0.0.1
        !           156: bool(true)
        !           157: creating unbound socket and hoping the routing table causes an interface other than lo to be used for sending messages to 224.0.0.23
        !           158: bool(true)
        !           159: creating receive socket
        !           160: resource(%d) of type (Socket)
        !           161: bool(true)
        !           162: bool(true)
        !           163: int(14)
        !           164: 1> initial packet
        !           165: leaving group
        !           166: bool(true)
        !           167: int(20)
        !           168: int(14)
        !           169: 2> unicast packet
        !           170: re-joining group
        !           171: bool(true)
        !           172: int(42)
        !           173: int(12)
        !           174: 3> mcast packet
        !           175: blocking source
        !           176: bool(true)
        !           177: int(31)
        !           178: int(14)
        !           179: 4> unicast packet
        !           180: unblocking source
        !           181: bool(true)
        !           182: int(27)
        !           183: 5> mcast packet from 127.0.0.1
        !           184: leaving group
        !           185: bool(true)
        !           186: int(20)
        !           187: int(14)
        !           188: 6> unicast packet
        !           189: joining source group
        !           190: bool(true)
        !           191: int(27)
        !           192: 7> mcast packet from 127.0.0.1
        !           193: leaving source group
        !           194: bool(true)
        !           195: int(20)
        !           196: int(14)
        !           197: 8> unicast packet

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>