3

私のアプリは 2 つのネットワーク カードにアクセスする必要があります。1 つはデータの受信用 (eth0) で、もう 1 つはデータの送信用 (3G モデム) です。

通常、カーネルはアプリが一度に 1 つのカードだけで動作するように強制します。

それを実行するために私ができることはありますか?

ありがとうございました。

4

3 に答える 3

3

カーネルはそのようなことをしません。

カーネルは、各カードに割り当てられているルーティング情報とネットワークに基づいて、トラフィックを最も適切な最終宛先にルーティングします。ただし、TCPを使用している場合、双方向通信では1つのルートのみが使用されます。これは、その接続に関連付けられているアドレスが1つしかないためです。

マルチホーミング送信/受信システムを実装しようとしている場合、これは通常のTCPではサポートされていません。カーネルに実装されている可能性のある別のプロトコルを使用する必要があります。

于 2010-05-26T19:01:13.980 に答える
2

カーネルは、単一のインターフェースを使用することを強制していません。特に指定しない限り、デフォルトのインターフェースが選択されます。bind() コマンドで IP アドレスを指定することにより、特定のインターフェイスを指定できます。使用可能なインターフェースとその名前のリストを取得するには、ioctl(SIOCGIFCONF) 関数を使用します。

例を次に示します: http://techpulp.com/2008/10/get-list-of-interfaces-using-siocgifconf-ioctl/

于 2010-05-26T20:11:06.227 に答える
1

2つの異なるUDPソケットをで別々のNICにバインドし、bind(2)一方を送信してもう一方をリッスンすることができます。

于 2010-05-26T19:58:26.580 に答える