2012-01-31 2 views
7

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

$data = ''; 

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

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

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

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

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

ответ

2

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

Смежные вопросы