我对套接字有一个相当特殊的问题。设置的基础是一个用 PHP 编写的分叉套接字服务器。(我知道,PHP,嘘等)
一个非常基本的代码示例是......
$controlSockets = stream_socket_pair();
$pid = pcntl_fork();
if($pid == -1)
throw new Exception("Fork error");
else if($pid) {
fclose($controlSockets[0]);
while(true) {
$read = array($controlSockets[1]);
$write = array();
$except = array();
// Sleep for half a second if there's nothing to read
while(stream_select($read, $write, $except, 0, 500000) > 0) {
$r = fgets($controlSockets[1]);
echo "'$r'\n read from socket."; // This outputs ''
}
// Re-set the read array as stream_select alters the array
$read = array($controlSockets[1]);
}
} else {
fclose($controlSockets[1]);
// do some work ...
sleep(5);
// end of work ...
$result = 'blah';
fputs($controlSockets[0], $result);
exit;
}
现在,问题是即使套接字包含在读取集合中,但它返回一个空字符串,据我所知,这永远不会发生,除非达到 feof,或者实际上有一些内容。在执行的前 5 秒内没有。
不过,发送过来的实际内容很好。
关于发生了什么的任何线索?
(上面的代码是伪代码,不知道实际示例是否有效,但这是发生了什么的大体思路)