Vai al contenuto
PLC Forum


Libnodave windows - Attenzione : Bug in chiusura connessione (Ethernet)


Messaggi consigliati

Inserito:

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 ?

Saluti

Davide


Gabriele Corrieri
Inserita:

Ciao Davide

penso 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

Gianmario Pedrani
Inserita:

Ottima analisi... complimenti... :)

Inserita:

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

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...