2011-10-20 6 views
0

私は、クライアントとサーバーの間で、UDPを使った練習のための基本的なファイル転送システムを実装しています。私はいくつかの基本的な信頼性を実装しようとしています。信号なしのUDPパケットを確認しますか?

私のサーバーは、データのチャンクを送信し、チャンクが受信されたという肯定応答信号を待ちます。信号を使用せずにより堅牢なメッセージを送信する方法はありますか?

理想的にはsendtoとrecvfromを使用できるようにしたいのですが、パケットが受信されない可能性がある場合は、recvfromがハングするだけです。

これが可能ですか、または信号を使用する必要がありますか?

答えて

3

select()を使用すると、クライアントからのACKを受け取ったソケットから読み取る入力があることを知ることができます。タイムアウトを指定すると、入力がない場合でもselect()が返されます。これにより、サーバーを "生きている"状態に保つことができます。

また、柔軟性の高いノンブロッキングI/Oを使用することもできますが、「ビジーループ」にならず、CPUを多量に消費する必要があるため、少し難しくなります。

+0

エラー、select()も 'busy loop'の解決策です。 – EJP

1

ソケット読み取りタイムアウトをsetsockopt()とSO_TIMEOUTで設定します。

関連する問題