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