PHP – обнаружение отключения удаленного хоста

Согласно документации , socket_read() должен возвращать FALSE когда удаленный узел закрыл соединение, и пустую строку '' когда больше нет данных для чтения. Однако во время моего тестирования он никогда не возвращает FALSE , даже когда я закрываю соединение удаленного хоста. Вот соответствующий код:

 $data = ''; do { $read = socket_read($socket, 1024); if ($read === FALSE) { throw new SocketDisconnectException(); } $data .= $read; } while ($read !== ''); 

SocketDisconnectException никогда не бросается, даже когда я SocketDisconnectException соединение удаленного хоста. Я дважды и тройка проверил, что я не поймаю исключение и не отбрасываю его, и даже выбросил echo и exit в условное выражение как проверку на здравомыслие.

Изменено поведение этой функции или я что-то не так?

Кажется, есть ошибка, если вы используете PHP_NORMAL_READ, она вернет false при удаленном отключении, но PHP_BINARY_READ вернет «". PHP_BINARY_READ по умолчанию, я бы предложил попробовать PHP_NORMAL_READ, если это работает для ваших целей.