2010-10-17 7 views
1

dans le socket entre le serveur et de nombreux clients nous avons besoin select() .je veux savoir où shoude être la fonction select()? Serveur ou client? si elle devrait être dans le serveur, quels changements nous devrions faire dans le clientselect() fonction

Répondre

3

L'utilisation de select() n'affecte en rien la sémantique de la communication socket. Il fournit simplement un moyen d'attendre plusieurs sockets (ou fichiers) simultanément, et de découvrir par la suite ceux qui sont prêts à fonctionner. Comme c'est le serveur qui a généralement de nombreuses connexions, c'est le serveur qui appelle select(). Rien de spécial à faire sur le client.

+1

À moins que le client n'attende une réponse du serveur, auquel cas le client utilisera select(). –

+0

@Blank: Non, le client appelle simplement 'send()' et 'recv()', ce qui bloquera naturellement si la fin du client n'est pas prête à effectuer l'opération demandée. La fonction 'select()' existe uniquement dans le cas où vous voulez attendre plusieurs événements de descripteur de fichier, et vous ne savez pas qui sera prêt en premier. C'est une perte d'effort de l'utiliser pour un seul descripteur (à moins que vous vouliez faire un certain type de protocole asynchrone full-duplex par opposition au modèle de requête-réponse beaucoup plus commun). –

+0

Votre conception de programme peut être telle que vous ne voulez/ne pouvez pas se permettre de bloquer sur envoyer/recv; vous avez besoin qu'ils se produisent seulement quand ils peuvent se produire, de sorte que les fonctions reviennent immédiatement. Les prises ne sont peut-être pas la seule chose à laquelle vous prêtez attention. –