Два процесса связывают и прослушивают один и тот же адрес и порт, но как убедиться, что они оба могут получать входящее сообщение?

#c #sockets #tcp #udp

#c #сокеты #tcp #udp

Вопрос:

У меня есть серверное приложение, часть его кода выглядит следующим образом:

 socket = socket(...); // create a socket
setsockopt(RE_USEADDR); // set the socket option RE_USEADDR
bind(socket, 127.0.0.1, 8080); // bind the socket to the IP address and Port
listen(); // listen
  

Вот вопрос:

  1. Я запускаю серверное приложение дважды, на одном компьютере, у одного и того же пользователя. Оба они могут работать хорошо.
  2. Запустите клиентское приложение, которое подключается к 127.0.0.1:8080
  3. Отправьте некоторое содержимое на сервер. Однако только одно из серверных приложений может получать сообщение от клиента.

Есть ли способ убедиться, что все два серверных приложения получают сообщение от клиента. Если есть, пожалуйста, объясните, как и почему в TCP и UDP.

Большое вам спасибо

Комментарии:

1. Есть серверное приложение переднего плана, которое пересылает сообщение двум другим серверным приложениям.

2. Как вы можете запустить 2 сервера, которые прослушивают один и тот же порт? Вы должны получить какое-то сообщение «ошибка, адрес уже используется». Или, может быть, я не понимаю RE_USEADDR вариант…

3. @pptaszni Да, вы можете, если используете опцию RE_USEADDR для сокета

4. Да, верно. Однако, по-видимому, поведение 2 сокетов, привязанных к одному и тому же адресу, не является детерминированным, согласно этому документу . Они также упоминают возможность использования многоадресной рассылки

5. @Kuroto Вы не можете подключить TCP-клиентский сокет к нескольким TCP-серверам одновременно, не говоря уже об отправке сообщения на несколько TCP-серверов одновременно. Для этого вам потребуется несколько TCP-подключений. Нет смысла привязывать несколько TCP-серверов к одному и тому же локальному IP / порту, за исключением, возможно, балансировки нагрузки. И в TCP нет многоадресной рассылки