#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.