James Hartig
James Hartig

Reputation: 1009

Set a timeout on socket_read

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 sent within 5 secs I want to shutdown the connection. Any Help? I already tried SO_RCVTIMEO with no luck.

I'm creating a socket with socket_create() and listening on it for connections, then when connected I listen for the data and then do something with it. When the timeout hits, I want to run socket_shutdown() and then socket_close().

Upvotes: 18

Views: 35115

Answers (4)

Konstantin  Ermolaev
Konstantin Ermolaev

Reputation: 11

$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();

Upvotes: 1

Nick
Nick

Reputation: 10549

this set 5 sec timeout of the socket.

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

Upvotes: 27

James Hartig
James Hartig

Reputation: 1009

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.

Upvotes: 5

OIS
OIS

Reputation: 10033

Have you tried socket_set_option with SO_RCVTIMEO

Timeout value for input operations.

Upvotes: 12

Related Questions