2010-08-09 11 views
3

J'essaie de porter un serveur/client ipv4 sur ipv6, mais le compilateur dit SOCKADDR_IN6 n'est pas déclaré dans la portée. SOCKADDR_IN est déclaré mais pas SOCKADDR_IN6. <Winsock2.h> est inclus.sockaddr_in6 non déclaré?

Quelqu'un a des idées pour lesquelles il ne serait pas déclaré?

+0

Impossible d'avoir une idée du type d'en-tête de système d'exploitation que vous utilisez. –

Répondre

8

Le documentation for sockaddr_in6 de Microsoft indique qu'il est défini dans l'en-tête ws2tcpip.h, probablement vous devez l'inclure.

Sous Linux, vous devez inclure différents éléments, sys/socket.h et netinet/in.h.

+0

Désolé, j'utilise Windows. Quand j'ai dit "est inclus", je voulais dire que Winsock2.h est inclus. J'ai mis des balises "<" and ">" autour d'elle donc il doit avoir été édité pour une quelconque raison – Brad

+0

@Brad: Ah, j'aurais dû remarquer la balise 'winsock' ... J'ai édité ma réponse pour Windows et j'ai aussi corrigé le formatage du' 'Dans votre question. – sth

+0

merci qui a semblé résoudre le problème, bien que maintenant je reçois toujours getaddrinfo() n'est pas déclaré .. – Brad

0

De msdn:

struct in_addr6 { 
    u_char s6_addr[16];    /* IPv6 address */ 
}; 

struct sockaddr_in6 { 
    short    sin6_family;  /* AF_INET6 */ 
    u_short   sin6_port;  /* Transport level port number */ 
    u_long   sin6_flowinfo; /* IPv6 flow information */ 
    struct in_addr6 sin6_addr;  /* IPv6 address */ 
    u_long   sin6_scope_id; /* set of interfaces for a scope */ 
    }; 

De votre question, je vois que:

SOCKADDR_IN6 != sockaddr_in6 

Minuscules vs confusion Majuscules?
Vous pouvez également ne pas avoir la dernière version de Winsock, je ne suis pas sûr de savoir jusqu'où le support IPV6 a été introduit, vous voudrez peut-être vérifier si c'est votre problème.

+1

J'ai la dernière version de MinGW qui devrait avoir la dernière version de Winsock. J'ai également essayé d'utiliser sockaddr_in6 en minuscules, mais il n'a pas été déclaré non plus. Où irais-je pour télécharger la dernière version? – Brad

+0

Je dirais que vous cherchez ceci: http://msdn.microsoft.com/en-us/windows/bb980924.aspx – Tomaka17

1

J'ai actuellement trouvé SOCKADDR_IN6 définition dans ws2ipdef.h en-tête (Visual Studio 2008). Cependant, comme indiqué dans un commentaire ci-dessous, MS Docs indique que cet en-tête ne doit jamais être utilisé directement (utilisez Ws2tcpip.h à la place).

+0

Les [MS docs] (https://msdn.microsoft.com/en-us/library/windows/ desktop/ms740496 (v = vs.85) .aspx) indique explicitement que ws2tcpip.h doit être utilisé et que "les fichiers d'en-tête Ws2def.h et Ws2ipdef.h ne doivent jamais être utilisés directement." –

+0

Je n'ai pas dit que ws2ipdef.h devrait être utilisé (directement), je viens de préciser où j'ai trouvé la définition SOCKADDR_IN6. – Alexandre