Newsgroup: it.comp.lang.c++
Titolo: problemi socket rete a stella

Ciao a tutti :)
Innanzitutto specifico che ho creato un motore per la gestione di 
connessioni socket in stream, ma non in c bensì in php.
Voi direte "e che ci fai qui?". Non ho ricevuto alcuna risposta da esperti 
in php, probabilmente perché in pochi usano questo linguaggio per far cose 
del genere... inoltre non penso di avere problemi col linguaggio in sé ma 
piuttosto c'è un problema generico relativo ai sockets, o di come il server 
li gestisce... essendo il C alla base del php non dovrebbero esserci molte 
differenze... per lo meno per quanto riguarda la teoria.
Dunque il motore in questione è alla base di una chat. Apre una porta, si 
mette in ascolto e riceve le connessioni, i dati e risponde. Funziona bene. 
ma...
Ho due problemi che ho la sensazione siano essere collegati.
Il primo è che a volte (molto raramente in verità) le stringhe inviate 
vengono troncate. Per esempio invio "Ciao a tutti" e il server libera 
"utti". Non sono sicuro del dove e quando vengono persi i dati, ma temo al 
momento del socket_read.
Il secondo è il più fastidioso. Sta capitando spesso (un paio di volte al 
giorno) che il server si blocca. Gli utenti connessi rimangono connessi ma 
se inviano stringhe il server non risponde. Chi non è connesso e cerca di 
connettersi, ci riesce ma lo stesso non invia né riceve dati: il client 
(costruito in flash) dà solo l'"ok connesso".
Una volta è successo che è stato in questa condizione un giorno intero tanto 
che sono stato costretto a killare il processo e riavviarlo. Ultimamente 
invece dopo 5 o 6 minuti si sblocca da solo liberando tutti insieme gli 
input avuti quando era bloccato (quindi riceveva tutto ma non liberava il 
flusso).
Mi sono fatto una idea... Credo che a causa del primo problema si perda il 
byte di fine invio (\r o \n o \0) per qualche utente e il server rimanga in 
ascolto in attesa appunto di quel byte da quell'utente. Però a questo punto 
basterebbe un altro invio per averlo e si dovrebbe sbloccare subito... 
invece no.
Non penso sia un qualche buffer che non svuoto e che si accumula, perché 
quando è bloccato controllo la percentuale di memoria e cpu usata ed è nella 
norma.
Qualcuno ha avuto esperienze in merito o ha una idea di che cosa capiti?
Il problema si presenta irregolarmente, quindi escludo l'impegno del server 
in qualche strano cron di manutenzione (anche perché quando è bloccato, il 
resto delle applicazioni che girano su quel server vanno bene, come per 
esempio mysql).
Scusate l'invasione ma non so che pesci prendere. :)
ciao,
Luca(riello) 

Ciao,
Questo newsgroup si occupa del linguaggio di programmazione C++. Per
questo non e' il posto piu' adatto per porre domande come la tua. Ti
invito a cercare un gruppo il cui argomento sia piu' rispondente alle
tue esigenze. Avrai maggior probabilita' di risolvere il tuo problema
ed eviterai perdite di tempo a chi consulta it.comp.lang.c++ .
Grazie,
Nicola Musatti

 ha scritto nel messaggio

Scusa non voglio far polemica o scatenare flames o far perdere tempo: tant'è 
che ho specificato subito che non è C. Ma sarei lo stesso OT se ti dicessi 
che l'ho sviluppato in C? Perché il discorso non cambierebbe. Non sto 
cercando una soluzione a livello di codice (che in ogni caso non posterei 
visto che sarebbero centinaia di righe) ma a livello concettuale. Siccome è 
più probabile che un programmatore in C++ abbia sviluppato una cosa simile, 
vorrei sapere se ha avuto quel problema o meno.
In ogni caso non dico che hai torto, ho spiegato le ragioni per cui ho 
postato qui... ciò non mi giustifica, è vero, ma ho già chiesto nei luoghi 
più adatti e non ho avuto risposta alcuna (nemmeno una idea di cosa possa 
essere... qualcuno ha detto timidamente che è quasi certo che non sia un 
errore di codice).
Non posso ritirare il post, ma sicuramente non insisto oltre :)
grazie comunque della precisazione
Ciao,
Luca(riello) 

 [...] Ma sarei lo stesso OT se ti dicessi che l'ho sviluppato in C? 
si
-- 
sbi

 si
Ok come non detto... scusatemi.
Ciao,
Luca(riello)