On 07/07/17 16:38, Sara Golemon wrote:
> On Fri, Jul 7, 2017 at 10:04 AM, Martijn van Duren
> <p...@list.imperialat.at> wrote:
>> My use case is to set up a cluster of processes each with their own task
>> and permission sets. These processes need to be able to communicate with
>> each other over socket pairs, not just between the parent and the child,
>> but also between children.
>>
> Sounds like you're describing unix domain sockets (or NamedPipes if
> you're on Windows).
> 
> -Sara
> 
Yes, although tcp/ip are also possible with stream_socket_pair.

The point is, regardless of unix - or tcp sockets, they still have an
underlying file descriptor, which I need to specify to the child, so
that they can start using it. Ergo, I need to find a way to export this
from the stream into PHP.

To put it in code:
<?php
$sp = stream_socket_pair(STREAM_PF_UNIX, STREAM_SOCK_STREAM, 0);
echo (int) $sp[0]."\n";
?>

This returns 4 (the object id), instead of 3 (the fd).

If I could get the fd, I could turn this into something like:

<?php
$sp = stream_socket_pair(STREAM_PF_UNIX, STREAM_SOCK_STREAM, 0);
switch (pcntl_fork()) {
case -1:
        exit(255);
case 0:
        fclose($sp[1]);
        pcntl_exec("/usr/local/libexec/whatever", ["-i", (int) $sp[0]]);
default:
        fclose($sp[0]);
        do_parent_code();
}
?>

Where whatever can be anything from a PHP-script to a C-compiled binary.

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to