PHP - обнаружение отключения удаленного хоста - PullRequest
7 голосов
/ 31 января 2012

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

$data = '';

do {
    $read = socket_read($socket, 1024);

    if ($read === FALSE) {
        throw new SocketDisconnectException();
    }

    $data .= $read;
} while ($read !== '');

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

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

1 Ответ

2 голосов
/ 31 января 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...