Использование send() для подключенного сокета UDP

#sockets #send

#сокеты #Отправить

Вопрос:

Как я правильно понял, мы используем send() для сокетов TCP и sendto() для UDP.

Теперь, если у нас есть подключенный сокет UDP, мы можем использовать send() для отправки данных без указания адресной информации.

Мой вопрос в том, влияет ли использование send() для подключения сокета UDP на базовый транспортный протокол?

Более конкретно, зависит ли семантика связи (надежная передача данных, ориентированная на соединение и т. Д.) От используемой функции или типа сокета?

Ответ №1:

Как я правильно понял, мы используем send() для сокетов TCP и sendto() для UDP.

На самом деле нет. Используется send для подключенных сокетов и sendto для неподключенных сокетов — поскольку send адрес назначения with будет извлечен из сокета, в то время как with sendto он будет указан явно.

Поскольку установленные TCP-сокеты всегда подключены, это неявно означает, что нужно использовать send их, а не sendto . Сокеты UDP могут быть подключены или не подключены — в первом случае send следует использовать и во втором sendto . Это не влияет на используемый протокол, т. Е. Он по-прежнему является ненадежным UDP. Это влияет только на то, откуда берется адресат: из сокета или задается в качестве аргумента.