Non intercetta la chiusura di un socket

giovedì 25 novembre 2004 - 17.25

ffederico Profilo | Newbie

ho un problema con i socket.

ho collegato due computer utilizzando i socket in tcp ip.

per gestire questo tipo di comunicazione ho utilizzato direttamente l'oggetto Socket e non i lTcpClient e simili.

la comunicazione avviene in maniera corretta e se sul client chiudo correttamente la connessione, il server se ne accorge ed esegue le sue operazioni.

se invece stacco il cavo di rete o spengo brutalmente la macchina, il server non se ne accorge.

perche'?

Brainkiller Profilo | Guru

Ciao,
se stacchi il cavo in teoria se i due socket sono connessi uno (quello sul server) dovrebbe rimanere scollegato e dovresti accorgertene.
Mi pare ci sia una proprietà chiamata IsConnected che ti permette di verificare se l'altra parte c'è ancora oppure no.
In ogni caso puoi fare un polling quindi spedire dei pacchetti sul destinatario e sul server dovrebbe scatenarti un'eccezione se di là nessuno ha accettato il pacchetto.

ciao
david

ffederico Profilo | Newbie

no. non funziona cosi'. ma credo sia voluto.

prova a staccare il cavo di rete e, prima che il server se ne accorga, prova a riconnetterlo. vedrai che i lclient ricevera' tutti i messaggi che non aveva ricevuto da quando era stato scollegato i lcavo di rete.

credo che questo comportamento sia voluto come in tutti i casi di IO.

la cosa che non riesco a fare e' pero' forzare invece il comportamento opposto.

ho provato con l'impostare la proprieta' KeepAlive o con il metodo Poll ma niente.

l'unica soluzione che ho trovato e' l'invio di un ack e l'intercettazione di un nak entro i secondi minimi che mi servono.

ffederico Profilo | Newbie

quella che ho proposto era una veloce soluzione ma e' migliore quella che trovate nel thread KeepAlive di un socket.

federico
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5