如何在socket_read中设置超时

时间:2014-09-24 02:49:18

标签: php

我想问一些帮助,如果在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中出现致命错误。

1 个答案:

答案 0 :(得分:1)

我成功地使用了它:

socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array("sec" => 60, "usec" = >0));

那应该给你超时60秒。