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

non-root-ping C++

DirectX11
DirectX11
Niveau 6
16 juillet 2014 à 21:57:58

Salut,
Alors ma question c'est :

Comment implémenter un ping(icmp) en C++ (portable linux / windows)
sachant que les raw socket nécessite d’être root ?

Dans des jeux comme "Minecraft" dans la liste des serveurs on peu voir le ping des serveurs.. Comment font-ils ?

fork le binaire system "ping" ça marcherait mais bon je trouve ca moche comme solution.

ps :
Lancer mon jeux en root n'est pas une solution.

godrik
godrik
Niveau 30
16 juillet 2014 à 22:05:24

Le ping reporte par minecraft n'est peut etre pas issue d'une requete icmp.

DirectX11
DirectX11
Niveau 6
16 juillet 2014 à 22:24:16

C'est ce que je me dit..
En gros dans mon archi j'ai un master serveur, des serveurs et des clients.

Dans le client quand j'affiche ma liste de serveur j'aimerais afficher le ping pour chaque serveurs.

Je pourrais très bien faire un packet avec une réponse et calculer le temps entre les deux..

je voudrais savoir comment vous, vous l’implémenteriez ?
:(

dark_drow
dark_drow
Niveau 15
17 juillet 2014 à 00:17:11

Si c'est juste pour un aller-retour - cad sans controle autre que le ping - je me débrouillerai avec des sockets tcp et des timers (avec un refresh toutes les 5s à 10s si tu veux un truc dynamique).

DirectX11
DirectX11
Niveau 6
17 juillet 2014 à 00:25:00

Comme les serveurs écoute en TCP et UDP je pensé faire ca sur la socket udp. Ca pourrait me permettre de faire des stats de packet loss. T'en pense quoi ?

dark_drow
dark_drow
Niveau 15
17 juillet 2014 à 00:41:51

c'est faisable, vu que j'ai bossé sur le streaming les packets se résumaient à "j'ai envoyé X packets à l'instant T" et le serveur répondait "réponse du packet à l'instant T, il est maintenant T' et j'ai reçu Y packets (avec de la chance X==Y ^^)

Mais bon après 6 mois de tests, le "packets droping" sur un canal UDP qui envoie des packets toutes les 5s ça arrive pas beaucoup... Là ou j'ai vraiment vu du packet droping c'est quand j'ai bossé sur un serveur de streaming :
- packets > 1500bytes (routeur 4g bouygue en particulier)
- connexion trop lente par rapport au rythme d'envoi

Mais le serveur de streaming qui m'envoyait ces stats là m'envoyait ça justement en UDP toutes les 5s... donc je suppose qu'ils estimait ça "safe" (normalement le protocole demande de le faire en TCP)

dark_drow
dark_drow
Niveau 15
17 juillet 2014 à 00:59:33

je vois que ma réponse est moyennement claire mais en gros pour résumer :

Le ping et le packet droping sont intimement lié d'après mon expérience (et même de jolies formule mathématiques).
Si ton client a un ping < 300ms tu vas probablement pas avoir des masses de packets dropping.
Pour du streaming c'est intéressant de connaitre ce taux de packets perdu pour ajuster ton débit d'envoi (cad dégrader la qualité pour revenir à 0 packet droping - vu que tout se passe en UDP* tu ne peux pas calculer le ping).

Dans tout les cas fait attention à ta MTU car certains routeurs ne pardonnent pas :(

dark_drow
dark_drow
Niveau 15
17 juillet 2014 à 01:14:09

dsl pour le triple post, ton sujet me semble interessant
Si c'est pas indiscret tu travaille sur quoi ?

DirectX11
DirectX11
Niveau 6
17 juillet 2014 à 01:39:36

Si si ta première réponse été claire pas de problème :)

Je bosse sur un jeu en 3d en gros c'est un minecraft like mais on essaye de faire une architecture la plus optimisé et modulable possible (dans un but d'apprentissage).

Donc pour les techno c'est a base de C++11, cmake, lua,
boost asio async, opengl + Qt et une architecture ECS
(entity component system).

pour revenir a ma question,
je vais faire ca avec le socket UDP,
et je vais en profiter pour que le serveur m’envoie le nombre de joueurs connectés.
au niveau du packet loss je pense que ca ira. (packet < 300o)

dark_drow
dark_drow
Niveau 15
17 juillet 2014 à 08:42:56

dac c'est carrément intéressant ^^ C'est le genre de projet qui m’intéresserait de faire aussi (et c'est aussi là que je suis un peu deg d'être en train de me spécialiser dans un langage mourant qu'est l'objective-c..)

Du coup j'ai vagabondé un peu et j'ai lu sur SoF que les jeux vidéos pouvait effectivement utiliser des protocoles de contrôle qui calculent éventuellement le ping/packet loss/synchro entre les clients (le ping si t'es en TCP, le packet loss en comptant les packets envoyés/reçu qui servent au jeu vidéo et la synchro via le protocole NTP)

BlueHdER
BlueHdER
Niveau 8
17 juillet 2014 à 11:07:15

et sur windows faut aussi changer la valeur d'une clé du registre mais c'est trop con je trouve je pense qu'il faudrait permettre au raw socket d'être utilisait même pour les non root ou admin

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