#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. Это влияет только на то, откуда берется адресат: из сокета или задается в качестве аргумента.