Установите тайм-аут на socket_read
Мне было интересно, как установить тайм-аут на вызов socket_read
? При первом вызове socket_read
он ожидает, пока данные будут отправлены, и если никакие данные не будут отправлены в течение 5 секунд, я хочу отключить соединение. Любая помощь? Я уже пробовал SO_RCVTIMEO
без везения.
Я создаю сокет с socket_create()
и слушаю его для соединений, затем при подключении слушаю данные и потом что-то делаю с ним. Когда хиты таймаута, я хочу запустить socket_shutdown()
, а затем socket_close()
.
Ответы
Ответ 1
Я сделал socket_listen, а затем сделал ручной тайм-аут со временем() + 2 и цикл while с неблокированным набором и socket_read() внутри. Кажется, работает нормально. Любые альтернативы?
UPDATE: я обнаружил, что установка сокета как неблокирующего, а затем с помощью socket_listen предоставила необходимый тайм-аут.
Ответ 2
этот набор составляет 5 секунд таймаута сокета.
socket_set_option($socket,SOL_SOCKET, SO_RCVTIMEO, array("sec"=>5, "usec"=>0));
Ответ 3
Вы пробовали socket_set_option с SO_RCVTIMEO
Значение таймаута для операций ввода.
Ответ 4
$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();