CONNEXION
  • RetourJeux
    • Tests
    • Soluces
    • Previews
    • Sorties
    • Hit Parade
    • Les + attendus
    • Tous les Jeux
  • RetourActu
    • Culture Geek
    • Astuces
    • Réalité Virtuelle
    • Rétrogaming
    • Toutes les actus
  • RetourHigh-Tech
    • Actus JVTECH
    • Bons plans
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTECH
  • 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
    • Xbox Series
    • Overwatch 2
    • FUT 23
    • League of Legends
    • Genshin Impact
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • PS4
  • One
  • Switch
  • Wii U
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Etoile Abonnement RSS

Sujet : C désactiver retransmission TCP

DébutPage précedente
1
Page suivantePage suivante
Exacompta Exacompta
MP
Niveau 10
01 décembre 2021 à 15:59:20

Bonjour, je travaille actuellement en C avec les socket.
Dans mon projet, j'ai besoin de n'envoyer qu'un seul paquet TCP sans faire de retransmission si je n'arrive pas à me connecter à l'hôte.
Le problème est donc que mon socket (Windows je précise) refait 4 tentatives avant de s'arrêter.

Merci de votre aide

godrik godrik
MP
Niveau 22
01 décembre 2021 à 16:45:41

mmm, j'utilise pas windows, donc je n'ai pas une reponse clairer. Mais il va falloir du support de l'OS pour faire ca.
1/ Soit l'OS te permet de controller le nombre de retransmission TCP pour une socket TCP particuliere. Mais je pense pas que ca fasse paarti de l'API. (mais peut etre)
2/ Soit tu formes le paquet a la main. Tu as peut etre une API qui te permet d'ecrire directement sur le reseau et auquel cas tu eux former le paquet IP qui va bien. Dans les unix, tu peux faire ca. Quand tu cree la socket, tu passe le parametre SOCK_RAW comme type de socket. Et tu formes ton paquet TCP la main.
3/ Tu reecris un driver reseau ou charge un autre driver reseau.

html55 html55
MP
Niveau 1
01 décembre 2021 à 21:48:57

Salut, ce comportement est normal, le nombre de tentative est était fixé par la clé de registre TcpMaxConnectRetransmissions ( https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc739819(v=ws.10)?redirectedfrom=MSDN#tcpmaxconnectretransmissions ). Cependant, ça semble déprécié depuis Windows 7 (malgré qu'un patch semble exister) :

The registry key TcpMaxConnectRetransmissions is no more supported since Windows Server 2008 / Windows Vista.

https://support.microsoft.com/en-us/topic/you-cannot-customize-some-tcp-configurations-by-using-the-netsh-command-in-windows-server-2008-r2-c1feebea-82a8-cb05-83c7-46ffb5fd9cec

Godrik à plutôt bien résumé la situation :

Soit tu trouve un workaround pour forcer Windows à utiliser une nouvelle valeur (genre cette classe WMI https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/settcpmaxdataretransmissions-method-in-class-win32-networkadapterconfiguration )

Soit en effet, tu utilise des raw sockets, cependant il y a pas mal de limitation sous Windows (https://docs.microsoft.com/en-us/windows/win32/winsock/tcp-ip-raw-sockets-2 ) mais si cela ne te bloque pas, c'est la solution idéale

Soit faire un driver, mais c'est plus compliqué et surtout il devra être signé si ton outil est amené à être partagé ( https://docs.microsoft.com/en-us/windows-hardware/drivers/install/kernel-mode-code-signing-policy--windows-vista-and-later- )

Dernière potentielle solution, tu peux astucieusement mettre en place un timeout de connexion afin de ne réaliser qu'un échange de paquet :


TcpMaxConnectRetransmissions
    Data type: uint32
    Access type: Read-only
    Qualifiers: MappingStrings ("Win32Registry|SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters|TcpMaxConnectRetransmissions")
    Number of times TCP attempts to retransmit a Connect Request before terminating the connection. The initial retransmission timeout is 3 seconds. The retransmission timeout doubles for each attempt. Default: 3, Valid Range: 0 - 0xFFFFFFFF.

Tu peux donc tenter de modifier le timeout des options de ton socket (TCP_MAXRT et depuis Windows 10 TCP_MAXRTMS)
https://github.com/nmap/nmap/issues/2113#issuecomment-683426090

N'hésite pas à nous tenir au courant :ok:

DébutPage précedente
1
Page suivantePage suivante
Répondre
Prévisu
?
Victime de harcèlement en ligne : comment réagir ?
Infos 0 connecté(s)

Gestion du forum

Modérateurs : godrik, LGV
Contacter les modérateurs - Règles du forum

Sujets à ne pas manquer

La vidéo du moment