Подключите сокет UDP, но все же получите дейтаграммы из других источников - PullRequest
1 голос
/ 04 ноября 2019

Можно ли установить назначение по умолчанию для UDP-сокета точно так же, как connect, но без потери возможности получать дейтаграммы из других источников?

Я говорю о собственном API сокетов ОС (BSD-socket / winsock2) и мне интересны ответы как для Linux, так и для Windows.

[ EDIT :]
Если это неясно, вот проблемная часть из connect docs :

Если сокет sockfd имеет тип SOCK_DGRAM, тогда адрес является адресомна который дейтаграммы отправляются по умолчанию, и единственный адрес, с которого принимаются дейтаграммы.

1 Ответ

2 голосов
/ 04 ноября 2019

Можно ли установить назначение по умолчанию для UDP-сокета точно так же, как Connect, но без потери возможности получать пакеты из других источников?

Насколько я могу судить, это не - connect() на сокете UDP, оба задают назначение-отправителя по умолчанию , а устанавливает фильтр, так что входящие пакеты UDP от всех других назначений, кроме указанного адреса / порта, отбрасываются.

Мое решение проблемы состояло в том, чтобы просто вызвать sendto() и recvfrom() вместо этого (если у вас есть класс UDPSocket или аналогичный в вашей кодовой базе, вы можете кэшировать адрес отправки по умолчанию как частную переменную-членв этом классе, так что остальная часть вашей кодовой базы может просто вызвать метод Send() и оставить его этому методу для обработки sendto() аргументов)

...