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