Как получить несколько пакетов UDP в C? - PullRequest
1 голос
/ 19 февраля 2010

Я сделал функцию для отправки UDP-пакета на сервер и для получения возвращенных пакетов. Когда я делаю один вызов recvfrom, он работает, но мне нужно получить все потенциальные пакеты с сервера в течение определенного времени ожидания.

Вот мой код: http://pastebin.be/23548

Может ли кто-нибудь мне помочь? Спасибо.

1 Ответ

1 голос
/ 19 февраля 2010

Опция SO_RCVTIMEO, которую вы установили для сокета, фактически является таймером неактивности. Другими словами, устанавливая RCVTIMEO, вы гарантируете, что вызов recvfrom вернется после истечения таймера, даже если данные не были получены. Не похоже, что это именно то, что вы пытаетесь сделать.

Есть несколько способов сделать то, что вы просите ... вот пара идей.

Если вам удобны сигналы, вы можете использовать «setitimer» для отслеживания максимального времени ожидания. http://linux.die.net/man/2/setitimer

Он отправит вашему процессу сигнал SIGALRM по истечении таймера, и в вашем обработчике сигнала вы можете установить флаг, который сообщает вашему циклу recvfrom о выходе.

В качестве альтернативы вы можете получить системное время в своей начальной точке, а затем опрашивать его в цикле recvfrom, чтобы узнать, передали ли вы требуемое значение времени ожидания. http://dell5.ma.utexas.edu/cgi-bin/man-cgi?gettimeofday+2

...