2011-07-13 17 views
4

私は3つのネットワークインターフェイスをPCに持っていて、udp socket sendを実行すると、特定のネットワークインターフェイス経由で送信します。データを送信する)。ブーストasio udpソケットを使用するときにローカルエンドポイントを設定する方法

ここにコードがあります。

udp::socket send_socket(io_service,boost::asio::ip::udp::v6()); 
udp::endpoint local_end_point(boost::asio::ip::address::from_string(LocalIpAddress),1111); 
// send_socket.bind(local_end_point); 
send_socket.send_to(const_buffer,senderEndpoint,0,error); 

上記のコードは機能しますが、データがどのネットワークインターフェイスを介して送信されるかについては制御できません。 send_socket.bind行のコメントを外すと、相手側のデータの受信を停止します。

特定のネットワークインターフェイスにソケットをバインドする他の方法はありますか?

+0

実際にエンドポイントを設定する例はありますか?例えば。 ::エンドポイントを構築するときのポート番号は何ですか? –

答えて

4

bind()は、ソケットを特定のネットワークインターフェイスに接続して送受信する機能です。相手側でデータの受信を停止すると、相手側がbindコールで指定したNIC経由でルーティングできない可能性があります。

+0

こんにちはチャド、私はリンクのローカルIPアドレスを使用しています。それが理由だろうか? – dev

+0

はい。 '127.0.0.1'へのバインディングがあれば、' 127.0.0.1'から受信したそのボックスのアプリケーションだけがデータを取得できます。外部マシンの接続を許可する必要がある場合は、マシン上の有効なNICにバインドする必要があります。 – Chad

関連する問題