сокет udp с c ++ и Windows API - PullRequest
       26

сокет udp с c ++ и Windows API

0 голосов
/ 13 января 2012

Я пишу сервер UDP для игры.Знаете ли вы, возможно ли иметь несколько сокетов в UDP на одном порту?или я должен использовать динамический порт (один сокет = один порт)?

спасибо

Ответы [ 3 ]

2 голосов
/ 13 января 2012

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

0 голосов
/ 13 января 2012

Конечно, вы можете иметь несколько сокетов UDP на одном порту, если SO_REUSEADDR указан через setsockopt. Однако я сомневаюсь, что вам действительно нужно использовать один UDP-сокет для связи с несколькими клиентами, что также возможно. UDP не ориентирован на соединение, UDP-API, такие как sendto и recvfrom, могут различать одноранговые узлы в одном сокете.

0 голосов
/ 13 января 2012

См. Использование SO_REUSEADDR ... :

Использование SO_REUSEADDR

Параметр сокета SO_REUSEADDR позволяет принудительно связывать сокет с порт используется другим сокетом . Второй сокет вызывает setsockopt с параметр optname установлен в SO_REUSEADDR и набор параметров optval до логического значения TRUE перед вызовом bind на том же порту, что и оригинальная розетка. Как только второй сокет успешно связан, Поведение всех сокетов, привязанных к этому порту, не определено. За Например, если все сокеты на одном и том же порту предоставляют службу TCP, любые входящие запросы TCP-соединения через порт не могут быть гарантированно обрабатывается правильным сокетом - поведение недетерминирована. Вредоносная программа может использовать SO_REUSEADDR для принудительное связывание сокетов, уже используемых для стандартного сетевого протокола услуги, чтобы запретить доступ к этим услугам. Нет спец Для использования этой опции требуются привилегии.

Чтение бонуса: Что именно делает SO_REUSEADDR? .

...