0

go-back-n ウィンドウを使用して、基本的な UDP ソケット ファイル転送サーバー/クライアントのセットアップに取り組んでいます。

通常、未処理のパケットのタイムアウトを管理するには、signal() を使用するだけですが、これが実際に Windows でどのように機能するか、またはこれが実際に最適なソリューションであるかどうかについては不明です。この種のソケット タイムアウトを処理する最善の方法はありますか? それとも、select() でタイムアウトを管理するのが最善ですか?

4

1 に答える 1

0

アプリケーションに「main()」関数がある場合、select() を使用してタイムアウトを管理するのが最も便利です。ソケット API 呼び出しのみを使用するという利点があるため、コードは bsd スタイルのソケット API をサポートするすべてのプラットフォームで動作するはずです。 Windows メッセージ ループは必要ありません。

ウィンドウ GUI スタイルのアプリケーションを作成している場合 (通常はWinMain()エントリ ポイントとメッセージ ループをWSAAsyncSelect使用)、ソケット ハンドルの () は、HWND に投稿された読み取り (および書き込み) 準備完了の通知メッセージを取得します。SetTimer同様に、定期的なWM_TIMER通知を投稿しGetTickCountます。アイドル状態が長すぎるソケットを検出するために使用されます。

于 2012-04-08T21:36:57.227 に答える