Bonjour
Je développe un petit serveur (sous linux) qui peut être amener à gérer de nombreuses sockets. Je les surveille en utilisant select().
J'ai une socket server qui écoute sur un port spécifique.
Au delà de 1024 sockets environ, je ne peux plus en créer de nouvelles puisqu'il y a une limite sur ce nombre.
Lorsque quelqu'un cherche à se connecter, select() réagit et j'appelle ensuite accept() qui lui me renvoie l'erreur EMFILE. Du coup je laisse tomber ma création de socket.
Et là c'est le drame : lorsque j'arrive à nouveau à mon select(), celui-ci réagit comme ci ma server socket avait quelquechose de neuf, alors que je suis sur qu'il n'y a pas eu de nouveau client qui a essayé de se connecter dessus.
Du coup je part dans une boucle infinie qui bloque le reste du programme: un coup de select qui retourne aussitôt puis un accept qui échoue, etc, etc ad lib.
Alors je me demande s'il y'a quelque chose à faire pour éviter ce problème ?
Peut-être quelque chose à faire à ma server socket pour lui faire comprendre que je refuse la connexion ?
Ou alors carrément fermer ma server socket le temps que quelques sockets se déconnectent ?
Si quelqu'un peut m'aider, je lui en serai éternellement reconnaissant !![]()
Partager