[英]Socket bind with wildcard ip
我创建了一个UDP套接字,并将该套接字绑定到inaddr_any (0.0.0.0)
和一些众所周知的端口号。 据我了解,此套接字可以通过指定端口号通过计算机的所有接口接收数据。 但是当我将调用send()
,它将使用默认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.