2010-04-06 6 views
3

Je développe un petit processeur de données en C++ sur des sockets UDP, et j'ai un thread (un seul, et à part les sockets) qui traite les informations reçues d'eux.C++ Winsock socket non-bloquante/asynchrone UDP

Mon problème se produit lorsque j'ai besoin de recevoir des informations de plusieurs clients dans le socket en même temps.

Comment pourrais-je faire quelque chose comme:

Socket foo; 
/* init socket vars and attribs */ 
while (serving){ 
thread_processing(foo_info); 
} 

pour plusieurs clients (nombre d'accès simultané) en C++? J'utilise winsocks atm sur win32, mais j'obtiens simplement des sockets udp de blocage standard qui fonctionnent. Pas de gui, c'est une application de console. J'apprécierai tellement un exemple ou un pointeur à un;).

Merci d'avance.

Répondre

1

La socket UDP peut recevoir des datagrammes de plusieurs clients avec la fonction recvfrom(). Il suffit de bloquer la réception, lire la demande, la traiter, envoyer la réponse, répéter. Vous n'avez même pas besoin d'un thread à moins que le traitement ne prenne beaucoup de temps (dans ce cas un thread connecté avec deux files d'attente, in et out, fonctionnerait).

0

Je suggérerais que cela est mieux traité en mettant les demandes dans une file d'attente et en laissant l'autre thread travailler hors de la file d'attente. Cela dissocie le socket reçu du processus et vous permet ainsi d'augmenter le nombre d'écouteurs et de traiter les threads si vos besoins changent.