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

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

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

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

我该怎么做呢?

看看SO_BINDTODEVICE。 Tuxology对此有很好的描述

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

W. Richard Stevens的UNIX网络编程,分两卷。 第一卷包括sockets。

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

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

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