Erro de falha de ligação IPV6: Não é possível atribuir o endereço solicitado [fechado]

0

Eu configurei o sistema Ubuntu Linux com as seguintes interfaces & amp; endereços IPv6 atribuídos da seguinte forma:

    **Eth0:** Link encap:Ethernet HWaddr 00:50:56:8d:57:64
    inet addr:192.168.254.10 Bcast:0.0.0.0 Mask:255.255.255.0
    inet6 addr: fe80::250:56ff:fe8d:5764/64 Scope:Link
    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
    RX packets:74231424 errors:0 dropped:1 overruns:0 frame:0
    TX packets:400372550 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000
    RX bytes:24514286488 (24.5 GB) TX bytes:115992171490 (115.9 GB)

    **Eth1:** Link encap:Ethernet HWaddr 00:50:56:8d:7c:4c
    inet addr:192.168.1.10 Bcast:0.0.0.0 Mask:255.255.255.0
    inet6 addr: fe80::250:56ff:fe8d:7c4c/64 Scope:Link
    inet6 addr: fc00:1234:1::10/120 Scope:Global
    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
    RX packets:434933479 errors:0 dropped:1 overruns:0 frame:0
    TX packets:39666183 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000
    RX bytes:126065364448 (126.0 GB) TX bytes:14437801257 (14.4 GB)

**Eth2:** Link encap:Ethernet HWaddr 00:50:56:8d:56:14
inet addr:192.168.2.10 Bcast:0.0.0.0 Mask:255.255.255.0
inet6 addr: fc00:1234:2::10/120 Scope:Global
inet6 addr: fe80::250:56ff:fe8d:5614/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:480068741 errors:0 dropped:0 overruns:0 frame:0
TX packets:34145702 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000
RX bytes:146795537550 (146.7 GB) TX bytes:10045338657 (10.0 GB) 

2. Eu queria fazer programação Socket usando sockets IPV6. O trecho de código que escrevi é o seguinte:

struct sockaddr_in6 sin
Ipv6_fdr = socket(PF_INET6, SOCK_DGRAM, IPPROTO_UDP)

bzero(&sin, sizeof(sin));  
sin.sin6_family = AF_INET6;  
sin.sin6_port = htons(2152);  
if ((setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(int))) < 0)  
memcpy(&(sin.sin6_addr), "fc00:1234:1::10",sizeof(sin.sin6_addr));  
if ((bind(sock, (struct sockaddr*)&sin, sizeof(sin)))< 0)

3. Após a compilação bem-sucedida, estou com erro de vinculação IPV6 Erro com o seguinte número de erro & amp; nome:

EADDRNOTAVAIL 99 /* Cannot assign requested address.

Após um certo número de tentativas de IPV6, a ligação gera um erro de falha de segmentação.

Seria ótimo se alguém pudesse me ajudar com o erro que estou cometendo aqui & amp; por que a ligação IPV6 está falhando?

    
por Kushal 06.12.2016 / 07:31

1 resposta

2

A linha

memcpy(&(sin.sin6_addr), "fc00:1234:1::10",sizeof(sin.sin6_addr));

está errado; não é assim que você define o endereço e a porta de um soquete. Por favor, veja man 7 ipv6 e a questão " Como definir a ordem de bytes sockaddr_in6 :: sin6_addr para a ordem de bytes da rede "no StackOverflow. Para seu caso de uso, você provavelmente usará inet_pton para converter o endereço do texto para o formato binário.

    
por AlexP 06.12.2016 / 08:08