| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- <?php
- /**
- * This file is part of workerman.
- *
- * Licensed under The MIT License
- * For full copyright and license information, please see the MIT-LICENSE.txt
- * Redistributions of files must retain the above copyright notice.
- *
- * @author walkor<walkor@workerman.net>
- * @copyright walkor<walkor@workerman.net>
- * @link http://www.workerman.net/
- * @license http://www.opensource.org/licenses/mit-license.php MIT License
- */
- namespace Workerman\Events\React;
- /**
- * Class StreamSelectLoop
- * @package Workerman\Events\React
- */
- class StreamSelectLoop extends \React\EventLoop\StreamSelectLoop
- {
- /**
- * Add signal handler.
- *
- * @param $signal
- * @param $callback
- * @return bool
- */
- public function addSignal($signal, $callback)
- {
- pcntl_signal($signal, $callback);
- }
- /**
- * Remove signal handler.
- *
- * @param $signal
- */
- public function removeSignal($signal)
- {
- pcntl_signal($signal, SIG_IGN);
- }
- /**
- * Emulate a stream_select() implementation that does not break when passed
- * empty stream arrays.
- *
- * @param array &$read An array of read streams to select upon.
- * @param array &$write An array of write streams to select upon.
- * @param integer|null $timeout Activity timeout in microseconds, or null to wait forever.
- *
- * @return integer|false The total number of streams that are ready for read/write.
- * Can return false if stream_select() is interrupted by a signal.
- */
- protected function streamSelect(array &$read, array &$write, $timeout)
- {
- if ($read || $write) {
- $except = null;
- // Calls signal handlers for pending signals
- pcntl_signal_dispatch();
- // suppress warnings that occur, when stream_select is interrupted by a signal
- return @stream_select($read, $write, $except, $timeout === null ? null : 0, $timeout);
- }
- // Calls signal handlers for pending signals
- pcntl_signal_dispatch();
- $timeout && usleep($timeout);
- return 0;
- }
- }
|