在socket_read上设置超时

时间:2008-12-23 18:15:04

标签: php sockets timeout

我想知道如何在socket_read电话上设置超时?它第一次调用socket_read时,它等待直到发送数据,如果在5秒内没有发送数据,我想关闭连接。任何帮助?我已经尝试SO_RCVTIMEO而没有运气。

我正在使用socket_create()创建一个套接字并在其上监听连接,然后在连接时我会监听数据,然后对其执行某些操作。当超时发生时,我想运行socket_shutdown()然后socket_close()

4 个答案:

答案 0 :(得分:22)

设置套接字5秒超时。

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

答案 1 :(得分:11)

您是否使用socket_set_option

尝试了SO_RCVTIMEO

输入操作的超时值。

答案 2 :(得分:3)

我做了一个socket_listen然后我用time()+ 2和一个带有nonblock set和socket_read()的while循环进行了手动超时。似乎工作正常。任何替代方案?

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

答案 3 :(得分: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();