CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

fonction select pour une socket

iscario
iscario
Niveau 7
21 mai 2010 à 20:09:46

Bonsoir,
J'ai des difficultés à utiliser la fonction select avec mes sockets (je pense que c'est la dernière fois que je viens avec des problèmes de socket une fois que j'aurais réglé celui là :-) )

voici mon code :
http://pastebin.com/2skkBAfu
et la sortie est la suivante : http://pastebin.com/ArJjeTUB

Mon problème comme vous pouvez le constater sur la sortie, est que l'une des sockets que j'ai créée disparait du set... Or je ne comprends pas pourquoi elle s'en va dans la mesure ou je ne l'enlève pas.
Et bien sur cela me dérange dans mon programme vu que le traitement associé à cette socket n'est jamais réalisé.

Un dernier petit coup de main sera donc le bienvenu :)
merci!

godrik
godrik
Niveau 30
21 mai 2010 à 20:28:51

Ce comportement est normal.

Select fonctionne de la facon suivante;
tu lui passe un ensemble (en fait 3, mais considerons seuleemtn la lecture) de descripteur de fichier a monitorer. select modifie cet ensemble en retirant les descripteurs de fichier sur lesquels il n'y a rien a lire.

Quand tu sors du select ligne 12, si il n'y a rien a lire sur ce descripteur de fichier, alors select le retire de l'ensemble. Du fait au premier tour de boucle, le serveur socket est bien present dans l'ensemble mais il a disparu au deuxieme tour.

Traditionnellement, les developpeurs reinitialise le FD_SET avant chaque appel a select.

PS: moi aussi j'ai envie de pendre le gars qui a pondu cette fonction.

dnob700
dnob700
Niveau 10
22 mai 2010 à 11:07:55

"Traditionnellement, les developpeurs reinitialise le FD_SET avant chaque appel a select.

PS: moi aussi j'ai envie de pendre le gars qui a pondu cette fonction. "

Ce qui est intéressant, c'est qu'on voit clairement, avec ce genre de problème, que même pour de la programmation système il peut être intéressant d'utiliser un langage de haut niveau et/ou fonctionnel. En OCaml par exemple (au hasard), l'interface avec le système d'exploitation est beaucoup plus facile à comprendre, car même si on ne peut pas se passer, parfois, de regarder dans le man, la plupart du temps le type d'une fonction est suffisant pour comprendre comment elle fonctionne. select par exemple attend en argument trois ensembles et renvoie trois nouveaux ensembles (les ensembles passés en argument sont inchangés). Et hop! plus de problème de ce genre.

iscario
iscario
Niveau 7
22 mai 2010 à 18:50:01

ah, c'est donc un comportement normal :fou: Bon je vais tester ca alors!
Par contre autre question : jusqu'à maintenant j'utilisais select avec juste un set de socket destiné à la lecture.
Mais je vais surement introduire un write.
Et je voulais savoir si dans l'appel à select je je pouvais passer les 2sets (read et write) en argument (leur pointeur tout du moins) ou si select était destiné à etre utiliser par 2 appels successifs (d'abord avec write en paramètre puis un autre avec un read ou inverse par ex). Car la doc est pas trop claire la dessus je trouve....

dnob700
dnob700
Niveau 10
22 mai 2010 à 19:46:18

Tu peux passer les deux ensembles en même temps. C'est prévu pour.

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment