La API de socket se rige por IETF RFC y debe ser la misma en todas las plataformas, incluida Windows WRT IPv6.
Para aplicaciones IPv4/IPv6 Es TODO sobre getaddrinfo()
y getnameinfo()
. getaddrinfo
es un genio: examina el DNS, los nombres de los puertos y las capacidades del cliente para resolver la eterna pregunta de "¿Puedo usar IPv4, IPv6 o ambos para llegar a un destino en particular?" O si va a la ruta de doble pila y quiere que devuelva direcciones IPv6 mapeadas IPv4, también lo hará.
Proporciona una estructura sockaddr *
directa que puede ser conectado a bind()
, recvfrom()
, sendto()
y la familia de direcciones para socket()
... En muchos casos, esto significa que no hay sockaddr_in(6)
estructuras desordenadas para llenar y tratar.
Para las implementaciones de UDP, tendría cuidado al configurar los sockets de doble pila o, de forma más general, el enlace a todas las interfaces (INADDR_ANY
). El problema clásico es que, cuando las direcciones no están bloqueadas (ver bind()
) a interfaces específicas y el sistema tiene múltiples solicitudes de interfaces, las respuestas pueden transitar desde diferentes direcciones para computadoras con múltiples direcciones basadas en los caprichos de la tabla de enrutamiento del sistema operativo, aplicación confusa protocolos, especialmente cualquier sistema con requisitos de autenticación.
Para implementaciones UDP donde esto no es un problema, o TCP, los sockets de doble pila pueden ahorrar mucho tiempo cuando IPv * -el funcionamiento de su sistema. Hay que tener cuidado de no confiar completamente en dual-stack donde no es absolutamente necesario ya que no hay escasez de plataformas razonables (Old Linux, BSD, Windows 2003) implementadas con pilas IPv6 que no sean capaces de sockets de doble pila.
Gracias por esta información, exactamente lo que estaba buscando. – Charles
Decir que IPV6_V6ONLY está desactivado de forma predeterminada en Linux es incorrecto: depende del sistema operativo, no solo del kernel. Por ejemplo, en Debian GNU/Linux, recientemente se activó por defecto. – bortzmeyer
OS X también lo tiene desactivado de forma predeterminada, pero lo mejor es configurarlo siempre explícitamente. El administrador del sistema local podría haberlo cambiado después de todo. –