Согласно документации , 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, если это работает для ваших целей.