关于php:在socket_read上设置超时

Set a timeout on socket_read

我想知道如何在socket_read呼叫上设置超时?第一次调用socket_read时,它将等待直到发送数据为止,如果5秒钟内没有发送数据,我想关闭连接。有帮助吗?我已经尝试了SO_RCVTIMEO并没有运气。

我正在用socket_create()创建一个套接字,并在其上侦听连接,然后在连接时侦听数据,然后对其进行处理。当超时达到时,我要先运行socket_shutdown(),然后运行socket_close()


此设置套接字的5秒超时。

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


您是否尝试过使用SO_RCVTIMEO

的socket_set_option

输入操作的超时值。


我做了一个socket_listen,然后用time()2和一个while循环进行了手动超时,里面有nonblock set和socket_read()。似乎工作正常。有其他选择吗?

更新:我发现将套接字设置为非阻塞状态,然后使用socket_listen提供了我需要的超时时间。


1
2
3
4
5
6
7
8
9
$read_socket = socket_select($read, $write  = NULL, $except = NULL, 10); // 10 - Timeout
if($read_socket === FALSE)
    $this->End();
elseif($read_socket === 0)
    return FALSE;

$pdu_ = socket_read($this->session, 102400);
if($read_socket && !strlen($pdu_))
    $this->End();