2012-01-31 11 views
7

Zgodnie z , ma on zwrócić FALSE, gdy host zdalny zamknął połączenie, i pusty ciąg '', gdy nie ma już danych do odczytania. Jednak podczas moich testów nigdy nie zwraca FALSE, nawet po zamknięciu zdalnego połączenia hosta. Oto odpowiedni kod:PHP - Wykrywanie zdalnego odłączenia hosta

$data = ''; 

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

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

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

SocketDisconnectException nigdy nie zostaje wrzucony, nawet kiedy odłączyć połączenia zdalnego hosta. Dwukrotnie i potrójnie sprawdziłem, czy nie dostrzegam wyjątku i odrzucam go, a nawet wrzucam do warunkowego warunku sprawdzania poprawności w postaci warunku echo i exit.

Czy zmieniło się zachowanie tej funkcji, czy też robię coś nie tak?

Odpowiedz

2

Wygląda na to, że jeśli używasz PHP_NORMAL_READ, zwróci false podczas zdalnego rozłączania, ale PHP_BINARY_READ zwróci "". PHP_BINARY_READ jest domyślny, sugeruję wypróbowanie PHP_NORMAL_READ, jeśli to działa dla twoich celów.

Powiązane problemy