Установить тайм-аут на socket_read - PullRequest
15 голосов
/ 23 декабря 2008

Мне было интересно, как я могу установить время ожидания для вызова socket_read? При первом вызове socket_read он ожидает отправки данных, и если в течение 5 секунд данные не отправляются, я хочу отключить соединение. Любая помощь? Я уже попробовал SO_RCVTIMEO без удачи.

Я создаю сокет с socket_create() и прослушиваю его для соединений, затем, когда он подключен, я слушаю данные и затем что-то с ними делаю. Когда истечет время ожидания, я хочу запустить socket_shutdown(), а затем socket_close().

Ответы [ 4 ]

23 голосов
/ 21 ноября 2011

это установить 5-секундный таймаут розетки.

socket_set_option($socket,SOL_SOCKET, SO_RCVTIMEO, array("sec"=>5, "usec"=>0));
11 голосов
/ 23 декабря 2008

Вы пробовали socket_set_option с SO_RCVTIMEO

Значение времени ожидания для операций ввода.

3 голосов
/ 23 декабря 2008

Я сделал socket_listen, а затем сделал ручной тайм-аут с time () + 2 и циклом while с неблокированным набором и socket_read () внутри. Кажется, работает нормально. Есть альтернативы?

ОБНОВЛЕНИЕ: я обнаружил, что установка сокета как неблокирующего, а затем использование socket_listen предоставила необходимое время ожидания.

1 голос
/ 29 ноября 2016
$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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...