我想问一些帮助,如果在60秒内读取或达到我设置的限制,我怎么能在socket_read中超时。我在如何实现这个问题上遇到了问题。 我知道它很复杂,但我没有得到第一个线程的帮助,这就是为什么我要求一些帮助。
提前谢谢。
<?php
$time_limit = 60;
set_time_limit (65);
if(isset($_GET['comm'])){
$command = $_GET['comm'];
$host = "xxx.xx.xxx.xx";
$port = xxxx;
$start_time = time();
$message = $command;
$socket = socket_create(AF_INET, SOCK_STREAM,0) or die("Could not create socket\n");
$result = socket_connect($socket, $host, $port) or die("Couldn't connect to server: [$errorcode] $errormsg");
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array("sec" => 60, "usec" => 0));
socket_write($socket, $message, strlen($message)) or die("Could not send data to server\n");
// This line I want to put time out if it reaches 60 seconds and
// prompt it to user or show some echo "request time out".
$resultserv = socket_read ($socket, 1024) or die("Could not read server response:
[$errorcode] $errormsg");
echo $resultserv;
socket_close($socket);
}
?>
已更新:我添加了socket_set_option();如果它读取达到60秒,我仍然会在socket_read中出现致命错误。
答案 0 :(得分:1)
我成功地使用了它:
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array("sec" => 60, "usec" = >0));
那应该给你超时60秒。