<?php include __DIR__ . "/mcast_helpers.php.inc"; $path = __DIR__ . "/unix_sock"; @unlink($path); echo "creating send socket\n"; $sends1 = socket_create(AF_UNIX, SOCK_DGRAM, 0) or die("err"); var_dump($sends1); socket_set_nonblock($sends1) or die("Could not put in non-blocking mode"); echo "creating receive socket\n"; $s = socket_create(AF_UNIX, SOCK_DGRAM, 0) or die("err"); var_dump($s); $br = socket_bind($s, $path) or die("err"); var_dump($br); socket_set_nonblock($s) or die("Could not put in non-blocking mode"); $r = socket_sendmsg($sends1, ["name" => ["path" => $path], "iov" => ["test ", "thing", "\n"], "control" => [["level" => SOL_SOCKET, "type" => SCM_RIGHTS, "data" => [$sends1, STDIN, STDOUT, STDERR]]]], 0); var_dump($r); checktimeout($s, 500); $data = ["name" => [], "buffer_size" => 2000, "controllen" => socket_cmsg_space(SOL_SOCKET, SCM_RIGHTS, 3)]; var_dump($data); if (!socket_recvmsg($s, $data, 0)) { die("recvmsg"); } print_r($data); error_reporting(0); $path = __DIR__ . "/unix_sock"; @unlink($path);
include __DIR__ . "/mcast_helpers.php.inc"; $path = __DIR__ . "/unix_sock"; @unlink($path); echo "creating send socket\n"; $sends1 = socket_create(AF_UNIX, SOCK_DGRAM, 0) or die("err"); var_dump($sends1); socket_set_nonblock($sends1) or die("Could not put in non-blocking mode"); echo "creating receive socket\n"; $s = socket_create(AF_UNIX, SOCK_DGRAM, 0) or die("err"); var_dump($s); $br = socket_bind($s, $path) or die("err"); var_dump($br); socket_set_nonblock($sends1) or die("Could not put in non-blocking mode"); socket_set_option($s, SOL_SOCKET, SO_PASSCRED, 1) or die("could not set SO_PASSCRED"); //$r = socket_sendmsg($sends1, [ // "iov" => ["test ", "thing", "\n"], //], 0); $r = socket_sendto($sends1, $msg = "dread", strlen($msg), 0, $path); var_dump($r); checktimeout($s, 500); $data = ["name" => [], "buffer_size" => 2000, "controllen" => socket_cmsg_space(SOL_SOCKET, SCM_CREDENTIALS)]; if (!socket_recvmsg($s, $data, 0)) { die("recvmsg"); } print_r($data); $pid = getmypid(); var_dump($data['control'][0]['data']['pid'] === $pid); error_reporting(0); $path = __DIR__ . "/unix_sock"; @unlink($path);
/** * Calculate message buffer size * * @param int $level * @param int $type * * @return int */ public function socketCmsgSpace(int $level, int $type) : int { return socket_cmsg_space($level, $type); }
<?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"); socket_set_option($s, IPPROTO_IPV6, IPV6_RECVTCLASS, 1) or die("err"); $r = socket_sendmsg($sends1, ["name" => ["addr" => "::1", "port" => 3000], "iov" => ["test ", "thing", "\n"], "control" => [["level" => IPPROTO_IPV6, "type" => IPV6_PKTINFO, "data" => ['addr' => '::1', 'ifindex' => 1]]]], 0); var_dump($r); checktimeout($s, 500); $data = ["name" => ["family" => AF_INET6, "addr" => "::1"], "buffer_size" => 2000, "controllen" => socket_cmsg_space(IPPROTO_IPV6, IPV6_PKTINFO) + socket_cmsg_space(IPPROTO_IPV6, IPV6_TCLASS)]; if (!socket_recvmsg($s, $data, 0)) { die("recvmsg"); } print_r($data);
/** * (PHP 5 >=5.5.0)<br/> * Calculate message buffer size * * @link http://www.php.net/manual/en/function.socket-cmsg-space.php * * @param int $level * @param int $type */ public function cmsgSpace($level, $type) { return socket_cmsg_space($level, $type); }