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 以外の情報はありません。これは無効な引数の番号です。
マシンにない偽のアドレスを割り当てようとすると、別のエラー「バインド: 要求されたアドレスを割り当てられません」が発生するので、渡したアドレスで問題ないと思います。
これはこれを行う正しい方法ですか?