ブロッキングソケットで受信するスレッドを作成します。パケットが到着するまで待機します。しかし、プライマリスレッドから切断しようとすると、スレッド間で競合が発生し、エラーが発生します。マルチスレッド - TCP接続の切断
ここでは、実際に切断呼び出しを終了することなく、スレッド間の5行目で切り替えが行われます。
void Disconnect() {
if(isConnected) {
if (closesocket(sockClient) != SOCKET_ERROR) {
isConnected = false;
}
}
}
どのようにして、スイッチを回避し、優雅にそれが切断コールを終了させなければなりませんか?
は、私は無限をしましたし、その受信コールでメッセージを待ってブロッキングのrecv()があります。ソケットで待っている間、私はそれをどのように伝えますか? – user963241
'WaitForSingleObject(terminateEvent)'にループを使用して、非同期受信を常にポストしておくことができます。私が指摘したように、これは2番目のアプローチがおそらくあなたにとって苦痛ではないもう一つの理由です。 –
私が代わりにブール値をisConnectedのロックをチェックするために開始し、切り離しの終わり()、しばらく(のWaitForSingleObject(terminateEvent、0)== WAIT_TIMEOUT)でSetEvent()とResetEvent()を設定しました。それは動作しますが、私はあなたが本当に意味することを推測します。 – user963241