2012-01-31 19 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決して私はリモートホスト接続を切断しても、スローされません取得します。私は例外をキャッチしてそれを破棄していないことをダブルチェックとトリプルチェックし、echoexitにサニティチェックとして条件付きでスローしました。

この関数の動作が変更されましたか、間違っていますか?

答えて

2

PHP_NORMAL_READを使用している場合、リモート切断時にfalseを返すバグがあるようですが、PHP_BINARY_READは ""を返します。 PHP_BINARY_READがデフォルトですが、PHP_NORMAL_READを試してみることをお勧めします。

関連する問題