Il fatto è che non è detto che il client chiuda la connessione al server... avendo 2 thread che ci accedono, mi dovrei aspettare 2 chiamate al close(), ma se il client lato suo non richiede la chiusura della connessione il client->close() dal thread della select non arriverà mai e non farà mai il delete...
Hai ragione.
Il problema di gestire tutto da un solo thread è che mi porterebbe a scegliere:
- Il delete del socket si fa SOLO se il client richiede la disconnessione, quindi dal thread della select().
- SOLO al momento della chiusura del server, quindi dal thread principale che gestisce il server.
Per la prima, non vorrei obbligare il client ad eseguire la disconnessione prima di fare lo shutdown del server.
Per la seconda, se il mio server rimanesse in vita per tanto tempo e si connettessero tanti client, dovrei tenere in memoria gli oggetti di ogni client anche se ormai si è disconnesso fino a quando il server rimane up. A meno di fare qualcosa che ad intervalli pulisca questa lista...


Rispondi quotando
