gpt4 book ai didi

c - 套接字编程: bind()-invalid argument

转载 作者:行者123 更新时间:2023-11-30 15:18:58 24 4
gpt4 key购买 nike

我正在尝试将本地 IPv6 地址绑定(bind)到套接字。但总是得到“无效参数”。我想将特定IP地址绑定(bind)到套接字的原因是,如果我不绑定(bind),则会出现错误“没有到主机的路由”。当我尝试使用下面的命令 ping IPv6 地址时,它不起作用。

ping6 fe80::7ed1:c3ff:fe86

我必须指出我想从哪个接口(interface)发送数据包。

ping6 -I en1 fe80::7ed1:c3ff:fe86

这工作得很好。所以我想如果我将套接字绑定(bind)到接口(interface),那么我就可以成功发送数据包。任何人都可以告诉我如何在不指定接口(interface)的情况下发送 IPv6 地址或如何解决这个绑定(bind)问题?

这是代码。

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <netdb.h>

#define LOCALADDR "fe80::7ed1:c3ff:fe86:ddae"

int main(void)
{
int sock,status;
struct addrinfo local_addr;
struct addrinfo *servinfo;
char buffer[1024];

/* create a DGRAM (UDP) socket in the INET6 (IPv6) protocol */
sock = socket(PF_INET6, SOCK_DGRAM, 0);

if (sock < 0) {
perror("creating socket");
exit(1);
}

/*Binding specific interface to socket*/
memset(&local_addr, 0, sizeof(local_addr));
local_addr.ai_family = AF_INET6;
local_addr.ai_socktype = SOCK_DGRAM;
local_addr.ai_flags = AI_PASSIVE;

if ((status = getaddrinfo(NULL, "3535", &local_addr, &servinfo)) != 0) {
fprintf(stderr, "getaddrinfo error: %s\n", gai_strerror(status));
exit(1);
}

if (bind(sock, (struct sockaddr *) &local_addr, sizeof(local_addr)) < 0)
error("ERROR on binding");

我还尝试将“getaddrinfo”中的“NULL”替换为“LOCALADDR”。

if ((status = getaddrinfo(LOCALADDR, "3535", &local_addr, &servinfo)) != 0) {
fprintf(stderr, "getaddrinfo error: %s\n", gai_strerror(status));
exit(1);
}

我仍然遇到同样的问题。

我可以成功地将套接字与“in6addr_any”绑定(bind),但随后出现错误“没有到主机的路由”。

最佳答案

这是一个链路本地 IPv6 地址,而不是可路由的 IPv6 地址。链路本地地址特定于链路,并且每个链路可以具有与其他链路相同的地址。例如,如果您有三个不同的接口(interface),则可以为每个接口(interface)分配相同的链路本地地址。要使用链路本地地址,您需要指定接口(interface),以便操作系统知道要使用哪个链路。所有接口(interface)都将在同一网络中拥有一个链路本地地址:fe80::/10。

如果您使用可路由的 IPv6 地址,则无需指定接口(interface)。

关于c - 套接字编程: bind()-invalid argument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30984656/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com