2012-03-02 4 views
1

私はCで単純なUDPソケットプログラムを持っています。クライアントはサーバにデータを送信し、肯定応答を受信します。私はすでに、タイムアウトを設定する方法を知っているので、 'recvfrom()'が一定の時間内に何も受信しない場合、アラームが消えます。C UDPソケットプログラムで再送信タイムアウトを設定するにはどうすればよいですか?

しかしながら、私が処理する必要がある状況がいくつかあります。予期しないアドレスからの返信を受け取った場合、または返信が正しくフォーマットされていない場合はどうなりますか?私はただちに再送したくないです、アラームが消えた時だけ。

明確にする必要がある場合はお知らせください。

+0

アラーム?あなたはbeejからネットワークコードをcribbingしていますか? – tbert

+0

who/beejは何ですか? – Groppe

答えて

1

select(2)poll(2)を参照してください。指定された時間ソケットを待つことができます。必要に応じて、タイムアウトを少なくして待機を再開できます。

Linuxの場合は、epoll(7)timerfd_create(2)を参照してください。

0

予期せぬアドレスからのものであるかどうかを確認したり、正しくフォーマットされていない場合は、受信したデータグラムを処理する必要があります。これらのケースを簡単に渡すためには、異なるケースを扱うステートマシンを構築する必要があります。

たとえば、あなたは、次の状態を持つことができます:

  • 読み取りタイムアウト
  • データ形式エラー
  • 無効な送信アドレス
  • 有効なデータも

あなたはのいずれかを検出した場合これらの他のエラー状態とあなたはすぐに再送信する必要はありませんタイマーや睡眠の何らかの並べ替えが必要です再送信の準備ができるまで待つようにしてください。

関連する問題