我想知道如何在socket_read
电话上设置超时?它第一次调用socket_read
时,它等待直到发送数据,如果在5秒内没有发送数据,我想关闭连接。任何帮助?我已经尝试SO_RCVTIMEO
而没有运气。
我正在使用socket_create()
创建一个套接字并在其上监听连接,然后在连接时我会监听数据,然后对其执行某些操作。当超时发生时,我想运行socket_shutdown()
然后socket_close()
。
答案 0 :(得分:22)
设置套接字5秒超时。
socket_set_option($socket,SOL_SOCKET, SO_RCVTIMEO, array("sec"=>5, "usec"=>0));
答案 1 :(得分:11)
答案 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();