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
) avec cette satanée fonction WSAAddressToString(). Voici le code que j'utilise afin de transformer une adresse IPv6 en chaine de caractère :
Code :
- struct in_addr MulticastAddr;
- struct sockaddr_in6 MulticastAddr_6;
- char lAdresseMulticastV6[46];
- DWORD dw = sizeof(lAdresseMulticastV6) ;
- DWORD MulticastAddr_6_Size = sizeof(MulticastAddr_6);
- if (addressType == IPV4)
- {
- MulticastAddr = connection->mediaAddress;
- sprintf(URL, "udp://%s -rtp -audio", inet_ntoa(MulticastAddr));
- }
- else if(addressType == IPV6)
- {
- MulticastAddr_6.sin6_addr = connection->mediaAddressIPV6;
- MulticastAddr_6.sin6_family = AF_INET6;
- MulticastAddr_6.sin6_flowinfo = 0;
- if( 0 == (WSAAddressToString((struct sockaddr *)&MulticastAddr_6,MulticastAddr_6_Size,NULL,lAdresseMulticastV6,&dw)))
- {
- sprintf(URL, "udp://%s -rtp -audio", lAdresseMulticastV6); }
- else
- {
- printf("Erreur WSAAddressToString : %d \n", WSAGetLastError());
- }
- }
|
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 :
- struct sockaddr_in6 addr_6;
- int addr_6_size = sizeof(addr_6);
- if (addressType == IPV6)
- {
- if(WSAStringToAddress(structure->addressStr, AF_INET6, NULL, (struct sockaddr *)&addr_6, &addr_6_size) != 0)
- {
- printf("Erreur WSAStringToAddress : %d \n", WSAGetLastError());
- }
- connection->mediaAddressIPV6 = addr_6.sin6_addr;
- }
|
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