Я работаю над реализацией протокола протокола UDP.Вызов connect() несколько раз в UDP-сокете для отправки на другой целевой адрес - действительный?
У меня вопрос о вызове connect() для UDP.
Я хочу использовать connect() и send() вместо sendto(). Обычно конец приемника не изменяется. Однако при определенных обстоятельствах это может произойти. Действительно ли вы вызываете connect() в сокет UDP, который уже подключен для установки другой цели без закрытия и повторного открытия сокета (и тем самым теряя буферизованные принятые датаграммы)?
Я не нашел никакой документации, является ли это действительным или нет (поэтому тестирование может только сказать мне, если это произойдет, что может быть не переносимым). В настоящее время я работаю с winsock2 в Windows 7, но хочу быть переносимым в другие (более новые) версии Windows и linux.
Спасибо. Теперь мне просто нужно знать информацию о Windows :-) Или просто попробуйте, если это сработает и надеется, что поведение не изменится. –
На самом деле, я нашел ответ для Windows, хотя похоже, что он реализован аналогично закрытию/повторному открытию сокета: «Для сокета без установления соединения (например, введите SOCK_DGRAM), [...]. Назначение по умолчанию можно изменить, просто вызвав соединение снова, даже если сокет уже подключен. Любые датаграммы, поставленные в очередь для получения, отбрасываются, если имя отличается от предыдущего соединения. ' –