0

Websocket ++ を Websocket サーバーへのクライアントとして使用して、クライアント サーバーの特定の IP を使用して接続したいと考えています。そのため、特定の IP にバインドする方法を見つけようとしていますが、うまくいきません。

on_socket_init ハンドラーを使用してソケットを構成する可能性があると考えましたが、このハンドラーは次のとおりです。

void on_socket_init(websocketpp::connection_hdl hdl, boost::asio::ssl::stream<boost::asio::ip::tcp::socket> &s) {
    boost::asio::ip::tcp::endpoint localEndpoint(
            boost::asio::ip::address::from_string("192.168.178.28"), 0);

    std::cout << "Before bind is done " << s.lowest_layer().local_endpoint().address().to_string() << std::endl;
    s.lowest_layer().bind(localEndpoint);
    std::cout << "Bind is done " << s.lowest_layer().local_endpoint().address().to_string() << std::endl;

これが起こる原因:

Before bind is done 192.168.178.28
terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> >'
  what():  bind: Invalid argument

私のローカルマシンでは複数のIPを持っていないので、私が持っている1つのIPにバインドするように指示しようとしています.bind()を呼び出すことができることを確認することを除いて、今のところ何も変更しないでください。しかし、それは爆発し、私には理由がわかりません。2 番目の IP を使用してサーバーでテストすると、同じエラーが発生します。

gdbを使用すると、内部バインド呼び出しのエラーコードをチェックする関数によって例外がスローされることがわかりました。その内部バインド呼び出しのコードがどこにあるのかわかりません。「無効な引数」またはエラー コード 22 以外の情報はありません。これは無効な引数の番号です。

マシンにない偽のアドレスを割り当てようとすると、別のエラー「バインド: 要求されたアドレスを割り当てられません」が発生するので、渡したアドレスで問題ないと思います。

これはこれを行う正しい方法ですか?

4

0 に答える 0