-
File descriptor socket
Bonjour,
Je suis en train de créer un serveur multi-threads en C sous linux.
Au retour de la fonction la fonction accept, j'ai un file descriptor qui correspond à la nouvelle socket créée :
Code:
accepted_socket_descriptor = accept (...);
Je souhaiterais savoir si tant que je n'ai pas fait appel à
Code:
close(accepted_socket_descriptor);
Le kernel peut-il re-attribuer le même file descriptor déjà créé?
Si je comprends bien le man du close, normalement non, mais on sait jamais: connexion fermée côté client, erreurs, ...
En d'autres termes, je voudrais utiliser la valeur accepted_socket_descriptor comme identifiant unique de mes clients et être sûr que le kernel n'attribuera jamais le même file descriptor tant que je n'ai pas fait de close.
-
A partir du moment où tu ouvre un FD, il est réservé et aucune fonction de ton processus ne pourra le réattribuer tant qu'il est ouvert. En cas d'erreurs (la plus fréquente étant la déconnexion brutale d'un client), la socket sera toujours ouverte mais sera inutilisable. C'est pour ça que quand un client se déconnecte, on ferme tout de suite la socket pour éviter le broken pipe.
Tant que tu ne l'aura pas close, elle restera ouverte.
-
Merci pour cette réponse très précise :ccool: