2012-05-14 2 views
8

Sono tenuto a mantenere alcuni socket che ho aperto con PHP e controllare quelle prese a intervalli regolari. Sono nuovo ai socket in PHP; Ho aperto le prese in questo modo:Come sapere se il socket è aperto in PHP?

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 
socket_connect($socket, $ip, $port); 

Alcune delle prese può entrare in uno stato in cui non restituiscono i messaggi; questi socket ricevono solo messaggi. Come posso sapere se un socket è aperto se il socket non risponde a un messaggio?

+0

È necessario distinguere le prese "aperte", ad es. Il sistema operativo alloca le risorse per quei descrittori e socket che sono "connessi" a un altro socket (ad esempio, i socket del server sull'host remoto). In questo caso la domanda dovrebbe essere su "... se un socket CONNECTION è aperto ..." secondo me. – excanoe

risposta

2

socket_sendto - Invia un messaggio a una presa di corrente, se è collegato o non

Sembra che si potrebbe usare socket_sendto e inviare alcuni dati 'ping' all'host remoto, quindi verificare il ritorno valore per determinare se il socket è ancora stabilito.

+0

Eri in grado di capirlo? –

+0

Che ne dici di un tentativo non bloccante di leggere dal socket? Questo dovrebbe tornare vuoto o falso, a seconda che sia connesso o meno. Genererà anche un avvertimento che penso, ma che può essere disabilitato. – transilvlad