私のアプリは 2 つのネットワーク カードにアクセスする必要があります。1 つはデータの受信用 (eth0) で、もう 1 つはデータの送信用 (3G モデム) です。
通常、カーネルはアプリが一度に 1 つのカードだけで動作するように強制します。
それを実行するために私ができることはありますか?
ありがとうございました。
私のアプリは 2 つのネットワーク カードにアクセスする必要があります。1 つはデータの受信用 (eth0) で、もう 1 つはデータの送信用 (3G モデム) です。
通常、カーネルはアプリが一度に 1 つのカードだけで動作するように強制します。
それを実行するために私ができることはありますか?
ありがとうございました。
カーネルはそのようなことをしません。
カーネルは、各カードに割り当てられているルーティング情報とネットワークに基づいて、トラフィックを最も適切な最終宛先にルーティングします。ただし、TCPを使用している場合、双方向通信では1つのルートのみが使用されます。これは、その接続に関連付けられているアドレスが1つしかないためです。
マルチホーミング送信/受信システムを実装しようとしている場合、これは通常のTCPではサポートされていません。カーネルに実装されている可能性のある別のプロトコルを使用する必要があります。
カーネルは、単一のインターフェースを使用することを強制していません。特に指定しない限り、デフォルトのインターフェースが選択されます。bind() コマンドで IP アドレスを指定することにより、特定のインターフェイスを指定できます。使用可能なインターフェースとその名前のリストを取得するには、ioctl(SIOCGIFCONF) 関数を使用します。
例を次に示します: http://techpulp.com/2008/10/get-list-of-interfaces-using-siocgifconf-ioctl/
2つの異なるUDPソケットをで別々のNICにバインドし、bind(2)
一方を送信してもう一方をリッスンすることができます。