View Full Version : chiusura socket in uso
su Winsock 2 se io con closesocket (l'equivalente di una close di Linux usata solo per i socket) chiudo un socket su cui un altro thread stava effettuando un'operazione bloccante accade che l'operazione bloccante termina subito con un codice di errore. ora volevo sapere: questa cosa è standard POSIX (funziona anche su Linux) o è solo su Winsock?
ilsensine
05-06-2007, 12:33
su Winsock 2 se io con closesocket (l'equivalente di una close di Linux usata solo per i socket) chiudo un socket su cui un altro thread stava effettuando un'operazione bloccante accade che l'operazione bloccante termina subito con un codice di errore. ora volevo sapere: questa cosa è standard POSIX (funziona anche su Linux) o è solo su Winsock?
Innanzitutto close su un fd utilizzato da qualche altra parte è un bug da evitare in quanto introduce una race molto subdola. Quindi non farlo, usa shutdown() se proprio devi.
Non so in effetti se shutdown risveglia eventuali operazioni bloccate sul socket, perché non fai una prova tu e ci fai sapere?
su Winsock 2 se io con closesocket (l'equivalente di una close di Linux usata solo per i socket) chiudo un socket su cui un altro thread stava effettuando un'operazione bloccante accade che l'operazione bloccante termina subito con un codice di errore. ora volevo sapere: questa cosa è standard POSIX (funziona anche su Linux) o è solo su Winsock?
L'errore è dovuto soltanto al fatto che un "thread" stà usando il socket in uso, presumo, in quanto non uso i "thread", e non usando i "thread" sotto windows con closesocket non ho problemi nella chiusura del socket anche se stà ricevendo dati. Mai avuto un errore del genere.
Devi chiudure con closesocket:
closesocket(client[i].Socket);//continua a ricevere
subito alla riga dopo fare:
client[i].Socket=0;//non riceve + nulla
Controlla la routine di invio:
if client[i].Socket<>0
send
perchè se continui avrai errore!
jappilas
05-06-2007, 16:29
su Winsock 2 se io con closesocket (l'equivalente di una close di Linux usata solo per i socket) chiudo un socket su cui un altro thread stava effettuando un'operazione bloccante accade che l'operazione bloccante termina subito con un codice di errore.
...
avevo sempre avuto l' impressione che non avesse senso chiudere socket e file appartenenti ad altri thread ... comunque, forse sarebbe consigliabile almeno sincronizzare l' accesso al socket :stordita:
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.