2012-01-31 10 views
7

Secondo the documentation, socket_read() deve restituire FALSE quando l'host remoto ha chiuso la connessione e una stringa vuota '' quando non ci sono più dati da leggere. Tuttavia, durante i miei test, non restituisce mai FALSE, anche quando chiudo la connessione host remoto. Ecco il codice rilevante:PHP - Rilevamento disconnessione host remoto

$data = ''; 

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

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

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

Il SocketDisconnectException mai si butta, anche quando stacco il collegamento host remoto. Ho verificato il doppio e il triplo che non sto rilevando l'eccezione e scartandola, e persino lanciata in un echo e exit nel condizionale come controllo di integrità.

Il funzionamento di questa funzione è cambiato o sto facendo qualcosa di sbagliato?

risposta

2

Sembra esserci un bug in cui se si utilizza PHP_NORMAL_READ restituirà false su disconnessione remota, ma PHP_BINARY_READ restituirà "". PHP_BINARY_READ è l'impostazione predefinita, suggerirei di provare PHP_NORMAL_READ se questo funziona per i tuoi scopi.

Problemi correlati