Ciao, anche se non ho nessuna esperienza di programmazione di rete cn le qt, posso cercare di aiutarti rifacendomi alla programmazione in ansi c.
In questo caso se ho due processi che comunicato mediante una soket di rete e voglio sapere quando la comunicazione viene interrotta per un guasto al cavo (oppure perché il cavo glielo togli) si usa la primitiva send.. Ti riporto sotto la primitiva:
int send (int socket, const void * msg, int len, unsigned int flags)
dove il parametro
flags rappresenta la maschera di gestione degli errori da settare come un or bit a bit dei seguenti parametri:
MSG_OOB
MSG_DONTWAIT
MSG_NOSIGNAL
se imposti il flags su
msg_dontwait rendi l'invio dei dati non bloccante in caso di errore. Quindi se stacchi il cavo la send restituisce il valore -1 e vengono inviati solo i byte del tuo messaggio antecedenti il guasto.
C'è anche da tenere conto che se stacchi "britalemente" il cavo di rete molto probabilmente il processo che invia i dati solleverà un'eccezione di tipo
SIGPIPE prima di andare in segmentation fault.
In questo caso devi impostare il flags su
msg_nosignal che permette al tuo processo di sopravvivere all'improvviso crash del socket e permette alla send di restituire -1 settando la variabile errno a
EPIPE. Successivamente così puoi gestire l'errore.
Di certo il secondo metodo è il migliore perché puoi gestire qualsiasi errore del socket. Spero di esserti stato d'aiuto. Ciao..