cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 26 févr. 2008 à 22:35
Salut,
En plus de select, il existe aussi WSAEventSelect et WSAAsyncSelect
pour gerer les sockets non bloquants, WSAAsyncSelect est
particulierement pratique si tu as une interface graphique (avec une
boucle de message).
Voici un ebook de reference qui contient la documentation et les
exemples pour utiliser select et les autres modeles cités ci dessus:
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 24 févr. 2008 à 13:37
Salut,
Logiquement la reponse devrait revenir sur le port qui a envoyé la
requete, donc il n'y a pas de deuxieme socket a binder pour recevoir
les requetes, tout se passe sur le premier.
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 24 févr. 2008 à 15:50
Salut,
C'est une mauvaise idée d'utiliser la meme structure pour ces deux appels, car ils ne representent pas la meme chose:
- la structure sin que tu passes a sendto est un parametre d'entrée qui specifie l'adresse de destination de ton paquet udp,
- la structure sin que tu passes a recvfrom est un parametre de sortie
(optionnel) qui specifie l'origine du paquet, autrement dit l'adresse
qu'elle contient avant l'appel a recvfrom n'a aucune importance, c'est
l'adresse une fois que la fonction a retourné qui est importante.
Il faut donc utiliser deux structures differentes, avec des noms un peu plus parlant que 'sin'.
D'autant plus que les paquets que tu recois ne proviennent pas
forcement de ton serveur dns, donc si tu écrases l'adresse de ton
serveur dns avec l'adresse d'origine tu paquet, ca sera plus compliqué
pour comparer les deux adresses.
Aussi, si tu dialogues uniquement avec un serveur dns, tu peux aussi
regarder ce que fait connect() sur msdn: ça permet de specifier une
adresse distante pour ton socket udp, et ça permet d'ignorer
silencieusement tout les paquets qui ne proviennent pas de cette
adresse, ce qui est pratique.
Vous n’avez pas trouvé la réponse que vous recherchez ?
_Xav_
Messages postés6Date d'inscriptionvendredi 21 septembre 2007StatutMembreDernière intervention30 avril 2008 26 févr. 2008 à 14:35
Salut,
j'ai finalement utilisé connect et qu'un descripteur (SOCKADDR_IN) contenant les infos sur la destination.
J'aurais encore une question stp:
- Comment rendre recv() non-bloquant sans utiliser de threads. Il existe select je crois? As-tu un exemple sous la main? Sinon je googlerais...