Partager via


Restrictions de plusieurs fournisseurs sur Select

La fonction select est utilisée pour déterminer l’état d’un ou plusieurs sockets dans un ensemble. Pour chaque socket, l’appelant peut demander des informations sur l’état de lecture, d’écriture ou d’erreur. Un ensemble de sockets est indiqué par une structure fd_set.

Windows Sockets 2 permet à une application d’utiliser plusieurs fournisseurs de services, mais la fonction select est limitée à un ensemble de sockets associés à un seul fournisseur de services. Cela n’empêche pas une application d’avoir plusieurs sockets ouverts via plusieurs fournisseurs.

Il existe deux façons de déterminer l’état d’un ensemble de sockets qui s’étend sur plusieurs fournisseurs de services :

  • Utilisation des fonctions WSAWaitForMultipleEvents ou WSAEventSelect lors du blocage de la sémantique est utilisée.
  • Utilisation de la fonction WSAAsyncSelect lorsque des opérations de non-blocage sont utilisées et que l’application utilise déjà une pompe de messages Windows.

Lorsqu’une application doit utiliser la sémantique de blocage sur un ensemble de sockets qui s’étend sur plusieurs fournisseurs, WSAWaitForMultipleEvents est recommandé. L’application peut également utiliser la fonction WSAEventSelect, qui permet aux événements réseau FD_XXX (voir WSAEventSelect) d’associer à un objet d’événement et d’être gérés à partir du paradigme de l’objet d’événement (décrit dans Objets d’E/S superposés et d’événements).

La fonction WSAAsyncSelect n’est pas limitée à un seul fournisseur, car elle prend un descripteur de socket unique comme paramètre d’entrée. Notez toutefois que la fonction WSAEventSelect offre de meilleures performances et une meilleure scalabilité que WSAAsyncSelect, car la surcharge de maintenance de la pompe de messages avec les messages d’événement Winsock augmente à mesure que le nombre total de sockets utilisés augmente.