2016-02-17 13 views
0

Я писал (с всемогущим C) сервером, который слушает в UDP. У меня есть 2 сокета, прослушивающих один и тот же порт (IPv4 и IPv6) и im, используя poll() для мониторинга обоих сокетов.Обработка ОПРОС с UDP

Итак, при прослушивании, каков правильный способ обработки опросов, извергающих erros? Можно ли получить POLLHUP? Если возможно, как это должно быть обработано? То же самое касается POLLERR

Кроме того, можно получить ПОЛЛРБАНД или ОПРОС? Если да, то что это значит и как его нужно обрабатывать?

Заранее спасибо.

PS: Все вопросы, связанные с UDP-

+0

Это не вероятно, что вы не получите каких-либо ошибок на всех, если вам 'отправлен через подключенный сокет UDP к недоступному адресату, и в этом случае вы должны отключить сокет и прекратить отправку в этот пункт назначения. Если вы получите какую-либо другую ошибку, это, вероятно, фатально, поэтому вы должны закрыть сокет и выйти. – EJP

ответ

0

POLLHUP указывает на то, что сокет был отключен. Поскольку ваша программа прослушивает сокет UDP, вы не должны получать это условие ошибки.

Вы можете получить POLLERR, однако, и должны быть готовы к его обработке. POSIX.1-2008 standard говорит

POLLERR 
An error has occurred on the device or stream. This flag is only valid in 
the revents bitmask; it shall be ignored in the events member. 

и вполне возможно, что ошибка происходит из-за сбоя оборудования. Вы должны уничтожить сокет и попытаться его воссоздать.

В отличие от TCP, UDP не имеет механизма для маркировки пакета как срочного или внеполосного, поэтому вы не должны получать POLLRDBAND или POLLPRI. Кроме того, оба эти условия не являются обязательными устаревающие расширения - таким образом, они не должны использоваться в соответствии со стандартом POSIX.1-2008:

Obsolescent 
The functionality described may be removed in a future version of this 
volume of POSIX.1-2008. Strictly Conforming POSIX Applications and Strictly 
Conforming XSI Applications shall not use obsolescent features. 

XSI STREAMS 
The functionality described is optional. The functionality described is also 
an extension to the ISO C standard. 
+0

Niceeeee Ответ г-н Эммерсон. Большое спасибо! :) – julino