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

システムの非ループバックインターフェイスである1つのインターフェイスのみに動的にバインドしたいと思います。

どうすればこれを行うことができますか?

4

3 に答える 3

4

SO_BINDTODEVICEを見てください。Tuxologyにはこれについての良い説明があります

于 2009-07-13T13:25:54.097 に答える
1

この問題に関する優れた本が必要な場合:

W.リチャードスティーブンスによるUNIXネットワークプログラミング、2巻。第1巻はソケットをカバーしています。

また、UNIX環境での高度なプログラミング。これもStevensによるもので、Ragoによる第3版で更新されています。

これらは、UNIX / Linux/etalのクラシックおよび標準リファレンスであると広く考えられています。

于 2009-07-13T15:15:44.513 に答える
1

SIOCGIFADDRioctl()を使用して、特定のインターフェースのIPアドレスを判別し、次にbind()そのアドレスを判別することができます。

于 2009-07-13T15:21:15.937 に答える