2
私はローカルアドレス/ポートの組み合わせにバインドされたブーストasioソケットを使用しようとします。それは素晴らしい作品です。何がうまくいかないのは、ソケットとアプリケーションがいったん停止して再起動すると、ソケットを再利用することです。ブーストasioでソケットを再利用
//
// open the socket - it would also be opened by the async_connect()
// method but we might need an open socket to bind it
_socket.open(boost::asio::ip::tcp::v4());
if (_bindLocal) {
boost::asio::socket_base::reuse_address option(true);
_socket.set_option(option);
_socket.bind(_localEndpoint);
}
// Invoke async. connect. Immediate return, no throw.
_socket.async_connect(_remoteEndpoint,
boost::bind(&MyTransceiver::handleConnect, this,
boost::asio::placeholders::error));
私は何が欠けていますか? open()、set_option()およびbind()呼び出しの順序は正しいですか?
エラーコードは0です。その後のasync_connect()の呼び出しでは、そのアドレスは2回使用できません。 set_option()が存在しない場合と同じです。 – PMiller
私はウィンドウ上にいると言います。netstatの出力には、使用しているソケットの「待機中」と表示されます。 – PMiller
あなたはtime_waitを意味しますか?正しい状態なので、reuse_addressをtureに設定する必要があります。ウィンソックAPIのsetsockopt()を使用して、SO_REUSEADDRプロパティを基になるソケットに直接設定しようとするかもしれません。 – Shawnone