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>