繁体   English   中英

套接字与通配符ip绑定

[英]Socket bind with wildcard ip

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

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

问题的上下文:

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

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

如果您有两个连接到同一网络的网络接口,则可以bind套接字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");
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM