2009-07-13 59 views
3

目前我做以下任何可用的端口上侦听所有接口:如何动态地将套接字绑定到一个网络接口?

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

我想动态绑定到只有一个接口,该系统的非回送接口。

我该怎么做呢?

回答

4

看看SO_BINDTODEVICE。

UNIX网络编程由理查德·史蒂文斯,分两卷:如果你想对此事的优秀图书Tuxology有这个

+0

网站关闭,缓存副本在这里:http://web.archive.org/web/20090812134009/http://tuxology.net/tag/interface – 2014-09-06 14:30:41

1

一个good description。第一卷涵盖了插座。

此外,UNIX环境中的高级编程也由Stevens进行,并在第3版中由Rago进行了更新。

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

1

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

+0

这是最常见的解决方案,但它会打破,如果你有具有相同地址或您的接口的多个接口会更改地址。 – ephemient 2009-07-13 15:31:00

相关问题