如何将套接字动态绑定到一个网络接口?

时间:2009-07-13 13:20:10

标签: c++ c sockets bind

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

// 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);
}

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

我将如何做到这一点?

3 个答案:

答案 0 :(得分:4)

看看SO_BINDTODEVICE。 Tuxology有good description这个

答案 1 :(得分:1)

如果你想要一本关于此事的优秀书籍:

W. Richard Stevens的UNIX网络编程分为两卷。第一卷包括插座。

UNIX环境中的高级编程,也是由Stevens编写的,并由Rago在第3版中更新。

这些被广泛认为是UNIX / Linux / et al

的经典和标准参考

答案 2 :(得分:1)

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