我创建了一个UDP套接字并将该套接字绑定到inaddr_any (0.0.0.0)
和其他一些套接字
众所周知的港口号码。根据我的理解,这个套接字可以通过指定的端口号在机器的所有接口上接收数据。
但是,当我打电话给send()
时,它将使用默认IP地址作为源地址。
问题的背景:
我正在实施LDP协议。它可以有许多你好的邻接。因此,我正在创建一个服务器来从路由器的其他接口恢复数据。一旦形成了hello邻接,那么hello消息将通过UDP发送到特定接口上,在该接口上创建hello邻接。
答案 0 :(得分:1)
根据数据包发送到的网络选择默认IP地址。例如,如果您有两个接口,一个连接到网络A,另一个连接到网络B,如果您向网络B发送数据包,数据包将与第二个接口的IP地址一起发送。出于这个原因,大多数时候你不必担心。
如果您有两个网络接口连接到同一网络,您可以bind
套接字到其中一个的地址,并且数据包将以该地址发送。例如,如果网络堆栈允许,这会将IP套接字绑定到192.168.122.1
:
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");
}