Socket timeout

lunedì 25 giugno 2007 - 15.23

JohnAsh Profilo | Junior Member

Ciao a tutti,

sto sviluppando un'applicazione server multi-thread in VC++ che implementa delle basilari funzioni di messaggistica. Tutto funziona correttamente, i clients riescono ad effettuare la connessione, a ricevere l'elenco degli altri clients connessi e a scambiare messaggi tra di loro.
Il server rimane attivo 24h su 24 e (salvo crash) non viene mai terminato. Capita spesso che anche alcuni clients rimangano connessi praticamente 24h su 24 .. Il problema che ho è il seguente:

Dopo un pò di tempo in cui il client è connesso al server (non sono riuscito ad identificare più precisamente quanto - sicuramente più di una decina di minuti), la connessione viene persa ma a me non giunge alcun errore, dalla parte client continua ad essere tutto come se la connessione fosse attiva. Mentre sul server, controllando un file di log che ho fatto salvare appositamente, mi risulta che il client è stato disconnesso per: Connessione interrotta forzatamente dall'host remoto (ricavato dalla gestione della SocketException).

Il client all'avvio, predispone un backgroundworker e lo avvia, il backgroundworker resta in esecuzione finchè il socket con il server è aperto ( while (sock->Connected) ) e nel momento in cui termina il suo lavoro ho implementato nella relativa funzione, il codice per farmi comparire a video una messagebox che mi segnali la disconnessione.

Le mie domande, alle quali spero ci sia qualcuno più competente di me che possa rispondere, sono:

- Com'è possibile che il server chiuda la connessione con il client ed al client non venga recapitata alcuna notifica? Quantomeno la proprietà "Connected" della classe socket dovrebbe assumere il valore falso e farmi dunque uscire dal while nel backgroundworker, ottenendo così l'avviso di disconnessione - cosa che non accade assolutamente.

- Mettendo caso che fosse il server ad interrompere la connessione, perchè lo fa? Esiste una sorta di timeout per le connessioni TCP?

- Ho provato a connettermi tramite telnet (da una macchina con FreeBSD) e la connessione sembra (almeno per ora) rimanere attiva per più tempo rispetto a quanto ne rimane sul client Windows. Ogni 10 minuti circa invio un comando al server per avere la lista dei client connessi e riesco a ricevere la risposta correttamente (quindi la connessione è aperta!). C'è del codice errato nel mio client Windows che interrompe la connessione quando non dovrebbe?

Spero che ci sia qualcuno in grado di aiutarmi .. sono due settimane che cerco di capire dov'è il problema .. senza risultati
Grazie in anticipo

Saluti!
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