0

C++ で Winsock 2 を使用していますが、サーバーがクライアント接続からの読み取りを停止する方法を考えています。読み取りスレッドがブロックされrecv()、中止する方法がわかりません。これを行う 1 つの方法は、 でノンブロッキング ソケットを使用することですselect()が、このスレッドは新しい をチェックする前に待機する必要がありselect()ます。

ソケットの読み取りを停止する適切な方法は何ですか?

4

2 に答える 2

1

へのブロッキング呼び出しを中止するには、別のスレッドからrecv()でソケットを閉じることができます。少し醜くても、うまくいくはずです。closesocket()

ソケットも試すことができshutdown()ます(私はそれをテストしたことはありません)。

于 2010-01-25T10:56:53.110 に答える
1

あなたのプログラムがソケット I/O 以外にやるべきことがあるなら、そもそもブロックすべきではありません。

スレッド待機する必要があると主張していますが、それはプログラムの現在の設計を反映したものにすぎません。なんらかの形式のノンブロッキング ソケットで動作するように再設計する必要があります。すべてのネットワークの問題は、ノンブロッキング ソケットを使用して対処できます。

Winsock を使用しているのでselect(). select()アプリケーションを多くのプラットフォームで実行する必要があり、最新のすべてのプラットフォームで利用可能な優れた (ただし相互に互換性のない) 代替手段を使用できない場合にのみ、これを選択することをお勧めします。

于 2010-01-26T02:55:21.333 に答える