Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ReactPHP libevent和套接字对抛出错误_Php_Libevent_Reactphp - Fatal编程技术网

ReactPHP libevent和套接字对抛出错误

ReactPHP libevent和套接字对抛出错误,php,libevent,reactphp,Php,Libevent,Reactphp,我有一个问题,然后我使用ReactPHP事件循环和流\u套接字\u对 使用StreamSelect循环,它可以完美地工作,但是我尝试将它与LibEvent扩展一起使用,我得到了无限的错误流: [warn] kevent: Bad file descriptor 复制此错误的最小代码 <?php require_once __DIR__ . '/vendor/autoload.php'; $loop = React\EventLoop\Factory::create(); $sock

我有一个问题,然后我使用ReactPHP事件循环和流\u套接字\u对

使用StreamSelect循环,它可以完美地工作,但是我尝试将它与LibEvent扩展一起使用,我得到了无限的错误流:

[warn] kevent: Bad file descriptor
复制此错误的最小代码

<?php

require_once __DIR__ . '/vendor/autoload.php';

$loop = React\EventLoop\Factory::create();

$sockets = stream_socket_pair(STREAM_PF_UNIX, STREAM_SOCK_STREAM, STREAM_IPPROTO_IP);

$pid = pcntl_fork();
if ($pid > 0) {
    fclose($sockets[1]);

    $loop->addReadStream($sockets[0], function ($socket) {
        $data = fread($socket, 100000);
        echo '[' . posix_getpid() . '] Master: ' . $data . PHP_EOL;
    });

    $loop->addTimer(1, function () use ($sockets) {
        fwrite($sockets[0], 'Hello slave!');
    });

    $loop->run();


} else {
    fclose($sockets[0]);

    $loop->addReadStream($sockets[1], function ($socket) {
        $data = fread($socket, 100000);

        echo '[' . posix_getpid() . '] Slave: ' . $data . PHP_EOL;
    });

    $loop->addTimer(1, function () use ($sockets) {
        fwrite($sockets[1], 'Hello master!');
    });

    $loop->run();
    exit();
}

pcntl_wait($status);

它与套接字对无关,而是与处理分叉相关。LibEvent声明:

有些事件机制无法跨fork生存。需要使用此函数重新初始化事件库(事件库reinit)

在fork之后添加“event\u base\u reinit”之后,一切正常