Bonjour,

Je développe actuellement un programme en C dans lequel j'implémente un serveur TCP. Pour gérer les évènements réseaux, j'utilise select. La socket serveur est scrutée par le select.
Mon problème est le suivant : j'arrive par moment à la limite de file descriptor utilisé pour mon process (je suis sous linux, la valeur est de 1024, trouvée avec ulimit -n). Je précise que ces file descriptor ne sont pas tous scrutés par select, il y a des fichiers aussi (je dis ça parce que je sais que select n'est pas fait pour gérer un aussi grand nombre de fd, mais ce n'est pas le problème ici).

Lorsque le client de trop tente de se connecter, le select est réveillé et m'indique une activité sur la socket serveur. Je fais un accept, qui échoue avec errno = EMFILE. Du coup je retourne dans le select, qui retourne aussitôt puisque je n'ai pas traité les données présentes sur la socket serveur : je pars dans une boucle infinie. Ce que j'aimerai faire : refuser la connexion du client (car pour l'instant il n'est pas notifié que sa connexion est refusée), et "vider" la queue de la socket serveur pour qu'elle attende une autre connexion. Une solution est de fermer la socket serveur, puis de la réouvrir, mais j'aimerais faire autrement.

Est-ce que quelqu'un à la solution, ou une idée ? Merci d'avance. Si je ne suis pas clair, merci de me l'indiquer aussi