2 votes

C++ Winsock 2 questions

J'ai lu la documentation pour Winsock2 sur MSDN, mais j'ai encore besoin de clarification sur quelques points, si quelqu'un peut m'aider.

J'avais prévu de créer quelque chose de similaire à la configuration que vous obtenez lorsque vous utilisez WSAAsyncSelect(), mais en utilisant un thread séparé. Puis-je utiliser WSAEventSelect() pour lier plus d'un socket à un seul objet événementiel?

Si j'utilisais un port de complétion à la place, quels événements recevrais-je à travers le port de complétion? La MSDN a une liste en termes d'opérations sur les fichiers, mais j'ai eu du mal à les relier aux événements (FD_READ, FD_WRITE, etc.) qui seraient envoyés à travers le port de complétion. Y a-t-il un moyen de savoir quel événement est en train de se terminer? ou dois-je prendre note de cela et le stocker dans une structure à chaque fois que j'envoie ou reçois quelque chose?

merci pour toute *aide que quelqu'un peut me donner sur cela =D

éditer: ou mieux encore, vaudrait-il mieux passer à C# pour faire cela? Il semble être très populaire et mieux adapté à cette tâche spécifique.

1voto

Martin Ba Points 10243

[Avertissement: J'ai une expérience extrêmement limitée en programmation de sockets.]

Je prévoyais de faire quelque chose comme la configuration que vous obtenez lorsque vous utilisez WSAAsyncSelect(), mais en utilisant un thread séparé. Est-ce que je peux utiliser WSAEventSelect() pour lier plus d'un socket à un seul objet événement?

Cela n'aurait aucun sens. Un événement ne peut être signalé qu'une seule fois. Donc si vous aviez plusieurs sockets connectés au même événement, alors quand il serait signalé, vous ne sauriez jamais quel socket a signalé l'événement !

Ce que vous pourriez faire est de créer un événement pour chaque socket (éventuellement plusieurs événements par socket: pour chaque événement FD_* qui vous intéresse) et d'utiliser WSAWaitForMultipleEvents (http://msdn.microsoft.com/en-us/library/ms742219%28v=VS.85%29.aspx)

1voto

Remy Lebeau Points 130112

Non, vous ne pouvez pas lier plusieurs sockets à un seul WSAEVENT. Vous devez appeler WSACreateEvent() et WSAEventSelect() pour chaque socket individuel pour lequel vous souhaitez recevoir des notifications. Vous pouvez utiliser WSAWaitForMultipleEvents() pour qu'un seul thread attende des événements de plusieurs sockets, cependant.

Quant à l'utilisation des ports de terminaison, je vous suggère de lire les articles de MSDN sur le sujet, tels que :

Windows Sockets 2.0 : Écrire des applications Winsock évolutives en utilisant des ports de terminaison.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X