2009-07-13 11 views
3

は現在、私はすべてのインターフェイス上で使用可能な任意のポートをリッスンするには、以下の操作を行います。ソケットを1つのネットワークインターフェイスにのみ動的にバインドする方法を教えてください。

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

私は動的に1つのインターフェイスだけ、システムの非ループバックインタフェースにバインドしたいと思います。

は、どのように私はこれを行うに行きますか?

答えて

4

SO_BINDTODEVICEをご覧ください。 W.リチャードスティーヴンスによって

UNIXネットワークプログラミング、2巻では:あなたが問題に関する優れた著書をしたい場合はTuxologyこの

+0

サイトがダウンしてキャッシュされています。http://web.archive.org/web/20090812134009/http://tuxology.net/tag/interface –

1

good descriptionを持っています。第1巻はソケットをカバーする。

また、スティーブンスによるUNIX環境での高度なプログラミング、およびRagoによる第3版で更新されています。

これら

は広くための古典と標準的な参考文献であると考えられているUNIX/Linuxの/ら

1

あなたが特定のインターフェイスのIPアドレスを決定するためにSIOCGIFADDR ioctl()を使用して、bind()そのアドレスにすることができます。

+0

これは最も一般的な解決方法ですが、同じアドレスを持つ複数のインターフェイスまたはインターフェイスがアドレスを変更します。 – ephemient

関連する問題