Bonjour,
Le problème que j'ai n'est pas spécifique à Windows, j'utilise boost::asio pour une connexion client / serveur (donc portable sur linux et autre), mais peut importe, ca aurait pu etre winsock...
Voici ce que j'essai de faire :
Le client envoi une requête au seveur et attend une réponse "aussitôt" pour continuer => j'utilise donc ici write/read de façon synchrone.
Le serveur lui, attend une requette de l'un des clients de façon asynchrone et traite la demande pour lui renvoyer la réponse => read_async/write_async
Jusqu'ici, pas de problème.
Sauf que parfois, j'ai besoin que le serveur prévienne tous les clients qu'il a effectué une action particulière.
Le serveur connait la liste des clients et envoi les messages correspondants.
Le problème est que je n'arrive pas à récupérer ces messages dans le client...
J'ai tenter ceci pour le client : (en pseudo-code)
write( request ); // j'envoi ma demande
read( response ); // j'attend la réponse avant de continuer
// traitement de la response
read_async ( callback_func );
// j'aimerai bien que callback_func soit appellée si on
// m'envoi des données sans rien demander
// mais je ne veux pas bloquer l'execution du programme...Mais forcément, pendant l'attente async, il se peut que je fasse une autre demande.
Première question : est-ce correcte de faire un write alors qu'un read_async est en cours ?
Actuellement, avec cette solution, callback_func n'est jamais appelée, par contre avec un read synchrone je reçois bien les données du serveur.
Quelle solution serait plus appropriée ?
Merci.