18

我想知道如何设置socket_read通话超时?第一次调用时socket_read,它会等到发送数据,如果在 5 秒内没有发送数据,我想关闭连接。有什么帮助吗?我已经试过SO_RCVTIMEO了,没有运气。

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

4

4 回答 4

26

这设置了 5 秒的套接字超时。

socket_set_option($socket,SOL_SOCKET, SO_RCVTIMEO, array("sec"=>5, "usec"=>0));
于 2011-11-20T23:09:41.847 回答
12

您是否尝试过使用SO_RCVTIMEO的socket_set_option

输入操作的超时值。

于 2008-12-23T18:58:12.830 回答
4

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

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

于 2008-12-23T19:11:59.277 回答
1
$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();
于 2016-11-29T12:57:33.730 回答