使用feof
或fgets
时,脚本会一直运行直到1分钟的最大执行时间标记。
my $socket = new IO::Socket::INET(
LocalPort => '5000',
Proto => 'tcp',
Listen => 5,
ReuseAddr => 1,
);
my $connection = $socket->accept();
$connection->send("\0"); # makes PHP send the contents
my $data = <$connection>;
if($data != "1234") {
$connection->send("not accepted");
} else {
$connection->send("accepted");
}
$connection->close();
PHP在60秒内不会发送内容。使用fread
时,它几乎立即传递数据(但只会返回\0
)。
$socket = fsockopen('tcp://192.168.56.101', 5000); // virtualbox IP
fwrite($socket, '1234');
echo fread($socket, 128);
fclose($socket);
上述脚本将几乎立即执行,但只会获取
\0
。while(!feof($socket)) {
echo fread($socket, 128);
}
使用上述脚本将延迟60秒后才发送任何数据。
问题
如何让PHP在不超过60秒的情况下发送并检索来自Perl套接字的所有数据?
recv
在这里并不是100%正确的,尽管在这样的简短输入下它可能会正常工作。 - hobbsrecv
不是完全可靠的:同意。我只是想解释为什么他看到脚本挂起并展示使用一个不关心换行符的函数可以成功地继续执行脚本。 - ChicagoRedSox