2012-01-31 58 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,如果這適用於你的目的。