|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Nouveau Membre du Club
![]() Inscription : juillet 2007 Messages : 209 ![]() |
Bonjour,
Je crée en ce moment un serveur basé sur select() pour la gestion des sockets. Je me demaindais... comment est-ce possible de séparer en plusieurs threads (2-3 peu importe) les connections pour un même port? Je voudrais pouvoir diviser les nouvelles connections afin de pourvoir les accepter plus rapidement. Est-ce que je dois faire (ex pour 2 threads) 2 appels à bind() différents pour la même addresse, ou un même bind() et 1 appeal à accept() pour chaque thread? Ou encore 1 appeal à select() à l'intérieur de chaque thread? Quelqu'un a une idée? Je ne sais pas trop comment m'y prendre. Je suis relativement débutant sur le plan des sockets. Merci! |
|
|
00
|
|
|
#2 |
![]() ![]() R&D en systemes informatiques bas niveau Unix/Linux Inscription : mai 2004 Messages : 7 168 ![]() |
Bonjour,
Le guide le plus complet sur la programmation sockets est probablement le guide de BEEJ (beej guide dans un moteur de recherche). Tu trouveras des tutos ici aussi : http://reseau.developpez.com/cours/ |
|
|
00
|
|
|
#3 |
|
Nouveau Membre du Club
![]() Guillaume BonnotIngénieur développement logiciels Inscription : janvier 2012 Messages : 17 ![]() |
pour faire simple, tu dois faire un thread qui fait que écouter
|
|
|
00
|
|
|
#4 | ||
|
Nouveau Membre du Club
![]() Inscription : juillet 2007 Messages : 209 ![]() |
Merci à vous deux.
J'ai lu un px le guide de beej sur select(). Je dois dire, très bien fait, très succint. Merci. Justement, de ce que j'ai lu, je crois avoir trouvé la solution mais j'aimerais que vous confirmiez (est-ce la meille chose à faire etc etc. Pour faire vite j'ai cette boucle qui regarde pour les modifications de sockets Code :
Maintenant, je crois savoir comment répartir le travail sur plusieurs threads. Dites moi si c'est correct. Un thread pour faire le listen() [en passant, aucune possibilité d'avoir plusieurs threads pour faire différents listen() sur *même port*?], suivi d'un appel à select(). Pour chaque nouveau socket dans le fd_set "socks" (qui est modifié après avoir appelé select())... puisque select() retourne les sockets ayant été modifiés, passer de façon équitable les différents sockets dans le fd_set à chaque threads (par example s'il y a 6 sockets ayant changé, et qu'on a 2 threads, j'en passe 3 à chaque thread). Comme l'opération est asynchonisée, lorsqu'un thread a fini avant un autre attendre que l'un finisse avec des mutexs. Refaire l'opération et ainsi de suite. Est-ce que ça a du sens? AUSSI, est-il possible de répartir encore mieux les taches. Je voulais savoir aussi, pour les nouvelles connections entrantes (ce qui se produit lorsque le fd_set "sock" contient le "listening socket"), est-il mieux d'avoir un thread *exclusif* pour l'acceptation de nouvelles connections? Merci beaucoup Array |
||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com