2009-07-13 53 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

相關問題