dan64100 Posted May 25, 2007 Report Posted May 25, 2007 Ciao a tutti,navigando nei sorgenti di libnodave mi sono accorto che la chiusura della connessione, fatta tramite ClosePort (in setportw.c) viene eseguita tramite una chiamata a CloseHandle.Questo non è corretto, un socket aperto con la funzione socket() *DEVE* essere chiuso con la funzione CloseSocket (magari preceduta da shutdown() ), altrimenti il socket non viene deallocato dal pool messo a disposizione da winsock.In parole povere, se nel nostro programma apriamo una connessione e questa resta attiva per sempre ok, altrimenti, se apriamo e chiudiamo la connessione solo quando abbiamo necessità di leggere o scrivere (cosa possibilissima) dopo circa 4000 connessioni (piu' o meno) abbiamo esaurito le risorse di winsock.Possibili soluzioni : 1) Chiamare CloseSocket passando come parametro di->fd.rfd (oppure DaveFDS.rfd se si usa il componente TNoDave per delphi), in questo caso ClosePort non deve essere usata.2) Evitare connessioni multiple.Nel primo caso, la funzione puo' essere chiamata direttamente, in quanto winsock è già stato caricato nello spazio di indirizzamento del nostro programma e WsaStartup è stato già eseguito.Cosa ne pensate ?SalutiDavide
Gabriele Corrieri Posted May 25, 2007 Report Posted May 25, 2007 Ciao Davidepenso che faresti cosa gradita a Thomas, che parla un italiano molto buono, a scrivere del bug, in modo da poter, nella prossima edizione, averlo corretto.Ciao
dan64100 Posted May 26, 2007 Author Report Posted May 26, 2007 Si, quello l'ho fatto subito il post era per prevenire qualche grattacapo nel frattempo, dato che mi sembra che queste lib siano molto utilizzate (a giusta ragione).Saluti
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now