Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1802 connectés 

  FORUM HardWare.fr
  Programmation
  API Win32

  [RESOLU] Utilisation de la fonction WSAAddressToString()

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[RESOLU] Utilisation de la fonction WSAAddressToString()

n°1754003
Joker28
Posté le 01-07-2008 à 14:44:35  profilanswer
 

Bonjour à tous!
 
    Dans le cadre de mon projet d'amener un support IPv6 à un player video, je rencontre quelques problèmes (et c'est rien de le dire  :D ) avec cette satanée fonction WSAAddressToString(). Voici le code que j'utilise afin de transformer une adresse IPv6 en chaine de caractère :
 

Code :
  1. struct in_addr                 MulticastAddr;
  2. struct sockaddr_in6          MulticastAddr_6;
  3. char      lAdresseMulticastV6[46];
  4. DWORD    dw = sizeof(lAdresseMulticastV6) ;
  5. DWORD    MulticastAddr_6_Size = sizeof(MulticastAddr_6);
  6. if (addressType == IPV4)
  7. {
  8.      MulticastAddr = connection->mediaAddress;
  9.      sprintf(URL, "udp://%s -rtp -audio", inet_ntoa(MulticastAddr));
  10. }
  11. else if(addressType == IPV6)
  12. {
  13.      MulticastAddr_6.sin6_addr = connection->mediaAddressIPV6;
  14.      MulticastAddr_6.sin6_family = AF_INET6;
  15.      MulticastAddr_6.sin6_flowinfo = 0;
  16.      if( 0 == (WSAAddressToString((struct sockaddr *)&MulticastAddr_6,MulticastAddr_6_Size,NULL,lAdresseMulticastV6,&dw)))
  17.      {
  18.          sprintf(URL, "udp://%s -rtp -audio", lAdresseMulticastV6);       }
  19.      else
  20.      {
  21.          printf("Erreur WSAAddressToString : %d \n", WSAGetLastError());   
  22.      }
  23. }


 
L'erreur 10014 :" WSAEFAULT - The specified lpcsAddress, lpProtocolInfo, and lpszAddressString are not all in the address space of the process, or the lpszAddressString buffer is too small. Pass in a larger buffer" m'est retournée.
Pour essayer d'avancer, je précise que l'adresse contenue dans mediaAddressIPV6 a été obtenue avec la fonction "symétrique" WSAStringToAdress comme suivant :
 

Code :
  1. struct sockaddr_in6 addr_6;
  2. int addr_6_size = sizeof(addr_6);
  3. if (addressType == IPV6)
  4. {
  5.     if(WSAStringToAddress(structure->addressStr, AF_INET6, NULL, (struct sockaddr *)&addr_6, &addr_6_size) != 0)
  6.     {
  7.      printf("Erreur WSAStringToAddress : %d \n", WSAGetLastError());
  8.      }
  9. connection->mediaAddressIPV6 = addr_6.sin6_addr;
  10. }


 
Ici, aucune erreur et l'adresse IPv6 apparait bien dans l'ordre "réseau" dans la structure sockaddr_in6.


Message édité par Joker28 le 01-07-2008 à 15:20:50
mood
Publicité
Posté le 01-07-2008 à 14:44:35  profilanswer
 

n°1754013
Joker28
Posté le 01-07-2008 à 15:20:28  profilanswer
 

J'ai trouvé la solution si ça peut intéresser :
 
Il faut IMPERATIVEMENT initialiser TOUS les champs de la structure sockaddr_in6 (sin6_addr, sin6_family, sin6_port, sin6_flowinfo, sin6_scope_id)  :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  API Win32

  [RESOLU] Utilisation de la fonction WSAAddressToString()

 

Sujets relatifs
[Résolu] Batch confirmation d'ajout d'une imprimante en réseaux ![RESOLU] asp .net c# textbox: modifier le contenu?
[Résolu] Vérifier qu'un service est démarré en VBS[Resolu] Impossible de valider la page en XHTML...
[résolu]Problème Carateres japonais UTF8 et IE7 php[VBA] Existe-t'il une fonction capable de trier un tableau?
[Résolu] Connexion sécurisée à une base de données MySQL[Résolu] Order By et Union
Pb Erreur changer MDP Admin local via domain [RESOLU][RESOLU]Mise en forme conditionnelle 15 condition / différente cellule
Plus de sujets relatifs à : [RESOLU] Utilisation de la fonction WSAAddressToString()


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR