Exemple #1
1
<?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);
Exemple #5
0
 /**
  * (PHP 5 &gt;=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);
 }