Мне интересно, каковы минимальные требуемые накладные расходы с точки зрения количества прослушивающих портов / серверных сокетов, необходимых для принятия, скажем, N различных соединений, каждое из которых использует другой транспортный протокол, который работает поверх IP, например TCP, SCTP, DCCP, UDP и т. Д.
Конечно, прямолинейный подход заключался бы в наличии N независимых серверных сокетов (каждый из которых создается вызовом socket()
с соответствующим параметром protocol
), каждый из которых прослушивает уникальный порт. Однако реализация этого подхода в приложении, которое одновременно использует несколько протоколов, была бы чрезвычайно неудобной, поскольку клиенту необходимо было бы знать несколько портов сервера. Кроме того, в одноранговом приложении, которое выполняет одноранговое соединение только один раз для каждого протокола (с одним и тем же клиентом), тот факт, что каждый из N серверных сокетов принимает только одно (клиентское) соединение, выглядит как огромные накладные расходы (N дополнительных сокеты вводятся исключительно для обработки N «реальных» соединений с одним пиринговым клиентом).
Можно ли сделать лучше, например за счет уменьшения количества сокетов слушающего сервера и / или прослушивания одного и того же порта?
(Для простоты можно предположить, что N = 2, одно соединение - TCP, а другое - DCCP или UDP (пожалуйста, не делайте предположений относительно связи без установления соединения, поскольку DCCP ориентирован на соединение).)
РЕДАКТИРОВАТЬ: меня не интересуют N (клиентские) соединения, файловые дескрипторы которых возвращаются N вызовами accept
. Вопрос в дополнительных накладных расходах, чтобы сделать эти N соединений возможными (т.е. должен быть хотя бы один дополнительный серверный сокет, который прослушивает входящие соединения).
accept
, который возвращает файловый дескриптор во вновь созданный клиентский сокет. - person eold   schedule 02.12.2013