【问题标题】:How do I dynamically bind a socket to only one network interface?如何将套接字动态绑定到一个网络接口?
【发布时间】:2009-07-13 13:20:10
【问题描述】:

目前我执行以下操作来监听所有接口上的任何可用端口:

// hints struct for the getaddrinfo call
struct addrinfo hints, *res;
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_PASSIVE;

// Fill in addrinfo with getaddrinfo
if (getaddrinfo(NULL, "0", &hints, &res) != 0) {
    cerr << "Couldn't getaddrinfo." << endl;
    exit(-1);
}

我只想动态绑定一个接口,即系统的非环回接口。

我该怎么做呢?

【问题讨论】:

    标签: c++ c sockets bind


    【解决方案1】:

    看看 SO_BINDTODEVICE。 Tuxology 有一个good description 这个

    【讨论】:

    【解决方案2】:

    如果你想要一本关于这个问题的优秀书籍:

    W. Richard Stevens 的《UNIX 网络编程》,分两卷。第一卷涵盖了套接字。

    也是 UNIX 环境中的高级编程,同样由 Stevens 撰写,Rago 在第三版中更新。

    这些被广泛认为是 UNIX / Linux / 等的经典和标准参考

    【讨论】:

      【解决方案3】:

      您可以使用 SIOCGIFADDR ioctl() 确定特定接口的 IP 地址,然后将 bind() 用于该地址。

      【讨论】:

      • 这是最常见的解决方案,但如果您有多个具有相同地址的接口或您的接口更改地址,它就会崩溃。
      猜你喜欢
      • 2013-01-06
      • 2016-01-15
      • 2020-11-06
      • 1970-01-01
      • 1970-01-01
      • 2012-12-04
      • 2019-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多