Pregunta No se puede desactivar la opción de socket IPV6_V6ONLY


Estoy tratando de Apague la opción de socket IPV6_V6ONLY.

int no = 0;     
setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, (void *)&no, sizeof(no)); 

¿Por qué falla lo anterior con errno 22 (EINVAL)?

Esto está en OS X. Tampoco funciona cuando no es 1. Establecer otras opciones de socket funciona, por ejemplo

int yes = 1;
setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (void *)&yes, sizeof(yes)); 

5
2018-04-07 21:33


origen


Respuestas:


A que llamo tu socket() como para fd? Si el primer parámetro, la familia de protocolos, no era AF_INET6 (o PF_INET6), entonces esta llamada no es aplicable.


4
2018-04-07 22:01



Parece que * el sistema operativo derivado de BSD no permite establecer ni borrar esta opción. Veo el mismo comportamiento en FreeBSD 8.X. El zócalo es 100% AF_INET6.


5
2017-11-21 14:36



Asegúrate de estar llamando bind()  después  setsockopt() para esta opcion


3
2018-05-12 19:35



Otra cosa que puede hacer que esto falle es hacerlo demasiado tarde, parece que en Linux al menos debe hacerse antes de que el socket esté vinculado.


0
2018-03-28 17:42



Preguntas populares