2012-01-31 17 views
7

Según the documentation, socket_read() se supone que volver FALSE cuando el host remoto ha cerrado la conexión, y una cadena vacía '' cuando no hay más datos a leer. Sin embargo, durante mi prueba, nunca devuelve FALSE, incluso cuando cierro la conexión del host remoto. Aquí está el código correspondiente:PHP - La detección de desconexión host remoto

$data = ''; 

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

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

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

El SocketDisconnectException no se tira, incluso cuando desconecto la conexión de host remoto. He comprobado doble y triple que no estoy atrapando la excepción y descartándola, e incluso arrojado un echo y exit en el condicional como un control de cordura.

¿Ha cambiado el funcionamiento de esta función, o estoy haciendo algo mal?

Respuesta

2

Parece haber un error en el que si usa PHP_NORMAL_READ devolverá falso en la desconexión remota, pero PHP_BINARY_READ devolverá "". PHP_BINARY_READ es el predeterminado, te sugiero que pruebes PHP_NORMAL_READ si eso funciona para tus propósitos.

Cuestiones relacionadas