Сокеты SFML, что означает сокет UDP, возвращающий «Отключенный»?

#sockets #networking #udp #sfml

#сокеты #сеть #udp #sfml

Вопрос:

Я пишу сетевую программу, используя SFML, и, насколько я понимаю, сокеты UDP полностью не подключаются

Когда я пытаюсь прочитать из своего сокета, я получаю код ошибки «Отключен», но в документации, похоже, не упоминается, что сокеты UDP могут возвращать такого рода ошибки (только TCP могут)

Что может означать отключение сокета UDP?

Ответ №1:

Хотя UDP как протокол является «бесконтактным», API-интерфейсы сокетов поддерживают виртуальные соединения, чтобы позволить функциям, ориентированным на подключение, продолжать работать. Когда вы вызываете connect сокет UDP, ОС запоминает установленные вами данные подключения так же, как обычно, и фильтрует вещи, которые не согласуются с виртуальным соединением, это позволяет вам использовать такие интерфейсы, как recv , send и getpeername поскольку одноранговый узел является неявным. Если вы не используете connect, вам нужно использовать такие интерфейсы, как sendmsg . sendto , recvmsg и recvfrom где одноранговый узел передается на основе каждого пакета.

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