2014-09-24 139 views
1

我想問一些問題,如果在60秒內讀取或達到我設置的限制,我如何在socket_read中超時。我在如何實現這個問題上存在問題。 我知道這是重複的,但我沒有得到第一線的幫助,這就是爲什麼我要求一些幫助。如何在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

http://php.net/manual/en/function.socket-set-option.php – Prix 2014-09-24 02:54:45

回答

1

我已經成功使用此:

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

這應該給你60秒的超時值。

+0

我應該在socket_connect之後放置那個? – kelly123 2014-09-24 03:06:34

+0

仍然出現致命錯誤 – kelly123 2014-09-24 03:42:22

+0

仍然指向socket_read.Fatal錯誤:在行中超過60秒的最大執行時間=> 28 – kelly123 2014-09-24 04:04:33