【问题标题】:multiple interface bind on same port多个接口绑定在同一个端口上
【发布时间】:2014-05-21 08:58:30
【问题描述】:

假设一个网卡对于每个以太网都有两个不同的 IP 地址,例如

eth0 having IP address if 1.2.3.4
eth1 having IP address if 5.6.7.8

我可以用一个端口打开一个连接吗,例如 1234 为每个 IP 地址举例

 1.2.3.4 binds on 1234
and 
5.6.7.8 binds on 1234

或者我应该得到端口已经绑定的错误

我可以为 IPv4 做一个,为 IPv6 做一个,不确定同一台机器上不同的 ip 地址和相同的端口是否可以工作

【问题讨论】:

    标签: networking


    【解决方案1】:

    没有“网卡有两个不同的 IP 地址”。 您有两个网卡,每个网卡都有一个唯一的 IP 地址。 在这种情况下,在每个 ip/nic 上打开相同的端口(并绑定)是正确的。

    【讨论】:

      【解决方案2】:

      一个网卡有两个不同的ip? 什么是eth0,eth1?它显示了两个网卡。

      无论如何,如果你的机器有两个网卡,你可以绑定。 但是您的机器有一个网卡和两个 IP 地址,请使用 INADDR_ANY。

      struct sockaddr_in sin;
      sin.sin_family = AF_NET;
      sin.sin_addr.s_addr = htonl(INADDR_ANY);
      sin.sin_port = htons(1234);
      
      bind( sock, ...., (struct sockaddr*)&sin, ... );
      

      如果接口使用 IPv6 地址,套接字域必须是 AF_INET6。

      int sock = socket( AF_INET6 , ... ,... );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-13
        • 2012-03-04
        • 2015-07-12
        相关资源
        最近更新 更多