I was wondering how can I set a timeout on a socket_read
call? The first time it calls socket_read
, it waits till data is sent, and if no data is s
Have you tried socket_set_option with SO_RCVTIMEO
Timeout value for input operations.
I did a socket_listen and then I made a manual timeout with time()+2 and a while loop with nonblock set and socket_read() inside. Seems to be working ok. Any alternatives?
UPDATE: I found that setting the socket as nonblocking and then using socket_listen provided the timeout I needed.
$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();
this set 5 sec timeout of the socket.
socket_set_option($socket,SOL_SOCKET, SO_RCVTIMEO, array("sec"=>5, "usec"=>0));