1

我创建了一个 UDP 套接字并将该套接字绑定到inaddr_any (0.0.0.0)和一些众所周知的端口号。据我了解,此套接字可以通过指定端口号通过机器的所有接口接收数据。但是当我调用send() 它时,它将使用默认 IP 地址作为源地址。

  • 如何选择默认 IP 地址?
  • 如果我想使用其他接口(默认接口除外)发送数据,该怎么做?

问题的背景:

我正在实现 LDP 协议。它可以有许多 hello 邻接。因此,我正在创建一个服务器来从路由器的其他接口接收数据。一旦形成了 hello 邻接关系,那么 hello 消息将通过 UDP 在创建 hello 邻接关系的特定接口上发送。

4

1 回答 1

2

默认 IP 地址是根据数据包发送到的网络选择的。例如,如果您有两个接口,一个连接到网络 A,另一个连接到网络 B,如果您向网络 B 发送数据包,数据包将使用第二个接口的 IP 地址发送。出于这个原因,大多数时候你不必担心它

如果您有两个网络接口连接到同一个网络,您可以bind将套接字连接到其中一个的地址,数据包将使用该地址发送出去。例如192.168.122.1,如果网络堆栈允许,这会将 IP 套接字绑定到 :

struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr("192.168.122.1");
addr.sin_port = 0;
if (bind(s, (struct sockaddr*) &addr, sizeof addr) == -1) {
    perror("bind");
}
于 2013-09-08T16:24:37.463 回答