UDP клиент не получает ответ от сервера с несколькими IP-адресами

У меня есть клиент UDP, который вызывает connect (), send () и recv ().

Сервер имеет несколько IP-адресов. Если ответ от сервера не от того же IP-адреса, что и запрос, то время ожидания recv () истекает. Я читал в другом месте, что это может быть потому, что клиент вызывает connect (), поэтому он будет принимать только ответ от того же IP.

Есть ли способ гарантировать, что сервер всегда отвечает с того же IP-адреса, что и запрос? Я хотел бы, чтобы сервер прослушивал все интерфейсы.

Update: если клиент не вызывает connect() и вызывает sendto() вместо send(), то recv() правильно получает ответ от сервера. Я все равно предпочел бы исправить это на стороне сервера, отправив ответ с того же IP, с которого пришел запрос. На сервере нет маршрутизации, это один сетевой интерфейс с несколькими IP-адресами.

2 ответа

  1. Это имеет смысл, если клиентские вызовы соединяются с одним IP-адресом и портом, он не получит датаграмму UDP, отправленную с другого IP или порта.

  2. Если вы хотите, чтобы ваш сервер прослушивал все ip-адреса и все порты, вам нужно будет программировать на уровне ethernet (raw sockets). Ознакомьтесь с этой ссылкой .

    При программировании в необработанных сокетах можно проверить код на IP-адрес, на который были адресованы датаграммы, и ответить с соответствующего IP-адреса.