Установите тайм-аут на socket_read

Мне было интересно, как установить тайм-аут на вызов 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();