2

と を使用して 1 つのクライアントのみを受け入れるサーバー アプリケーションがありboost::asio::ip::tcp::acceptorますasync_accept

クライアント アプリケーションを実行しboost::asio::ip::tcp::socketasync_connectメンバー関数を使用して正常に接続しました。

次に、クライアントをクラッシュさせます (CTRL-ALT-DEL)。

クライアント アプリケーションを再起動して再接続しようとすると、成功します...

async_acceptサーバー側でやり直しはしませんが。

これはどのように可能ですか?

編集:

サーバー アプリケーションが実行されていない場合は、正常にasync_connect失敗します。

4

1 に答える 1

3

これは、アクセプターがまだリッスン状態にあるために可能です。リッスン状態の間、着信接続は操作によって受け入れられるまでキューに入れられaccept()ます。アクセプターの状態と操作の詳細については、この回答を参照してください。

目的の動作を得るにはclose()、接続が受け入れられた後の単純なアクセプターです。接続が閉じた後、 を実行して、アクセプタをリッスン状態に戻しopen() -> bind() -> listen()ます。

于 2013-05-15T17:29:44.800 に答える