]> granicus.if.org Git - php/commitdiff
Add test for recvmsg()
authorGustavo Lopes <glopes@nebm.ist.utl.pt>
Fri, 2 Nov 2012 13:03:47 +0000 (14:03 +0100)
committerGustavo Lopes <glopes@nebm.ist.utl.pt>
Sat, 2 Feb 2013 15:38:05 +0000 (16:38 +0100)
ext/sockets/tests/recvmsg.phpt [new file with mode: 0644]

diff --git a/ext/sockets/tests/recvmsg.phpt b/ext/sockets/tests/recvmsg.phpt
new file mode 100644 (file)
index 0000000..30263a4
--- /dev/null
@@ -0,0 +1,86 @@
+--TEST--
+recvmsg(): basic test
+--SKIPIF--
+<?php
+if (!extension_loaded('sockets')) {
+die('skip sockets extension not available.');
+}
+if (!defined('IPPROTO_IPV6')) {
+die('skip IPv6 not available.');
+}
+
+--FILE--
+<?php
+include __DIR__."/mcast_helpers.php.inc";
+$addr = '::1';
+
+echo "creating send socket\n";
+$sends1 = socket_create(AF_INET6, SOCK_DGRAM, SOL_UDP) or die("err");
+var_dump($sends1);
+$br = socket_bind($sends1, '::', 7001) or die("err");
+var_dump($br);
+socket_set_nonblock($sends1) or die("Could not put in non-blocking mode");
+
+echo "creating receive socket\n";
+$s = socket_create(AF_INET6, SOCK_DGRAM, SOL_UDP) or die("err");
+var_dump($s);
+$br = socket_bind($s, '::0', 3000) or die("err");
+var_dump($br);
+
+socket_set_option($s, IPPROTO_IPV6, IPV6_RECVPKTINFO, 1) or die("err");
+
+$r = socket_sendto($sends1, $m = "testing packet", strlen($m), 0, $addr, 3000);
+var_dump($r);
+if ($r < 12) die;
+checktimeout($s, 500);
+
+$data = [
+    "name" => ["family" => AF_INET6, "addr" => "::1"],
+    "buffer_size" => 2000,
+    "controllen" => socket_cmsg_space(IPPROTO_IPV6, IPV6_PKTINFO),
+];
+if (!socket_recvmsg($s, $data, 0)) die("recvmsg");
+print_r($data);
+
+--EXPECTF--
+creating send socket
+resource(%d) of type (Socket)
+bool(true)
+creating receive socket
+resource(%d) of type (Socket)
+bool(true)
+int(14)
+Array
+(
+    [name] => Array
+        (
+            [family] => %d
+            [addr] => ::1
+            [port] => 7001
+            [flowinfo] => 0
+            [scope_id] => 0
+        )
+
+    [control] => Array
+        (
+            [0] => Array
+                (
+                    [level] => %d
+                    [type] => %d
+                    [data] => Array
+                        (
+                            [addr] => ::1
+                            [ifindex] => %d
+                        )
+
+                )
+
+        )
+
+    [iov] => Array
+        (
+            [0] => testing packet
+        )
+
+    [flags] => 0
+)