На каком локальном интерфейсе было получено соединение или пакет? - PullRequest
3 голосов
/ 07 марта 2011
  1. При получении пакета по неподключенному сокету UDP, связанному с 0.0.0.0 / INADDR_ANY, как я могу определить, на какой локальный IP-адрес он был отправлен?
  2. Можно ли определить, к какому интерфейсу он относится?был получен на?
  3. Можно ли это сделать и для сокетов, ориентированных на установление соединения, таких как TCP?

Update0

  1. Платформа - Linux, поэтому языкне имеет значения, но C является родным.
  2. UDP-сокеты привязаны к INADDR_ANY хосту, поэтому getsockname() возвращает 0.0.0.0.

Ответы [ 2 ]

1 голос
/ 07 марта 2011

Мне приходилось сталкиваться с той же проблемой на платформах Windows. Моим решением было явное прослушивание всех доступных интерфейсов, так как getsockname() работает как положено.

1 голос
/ 07 марта 2011

Хммм, посмотрите на это .Похоже, что, возможно, есть опция сокетов, по крайней мере, в мире Linux / Unix.На каких ОС ему нужно работать?

...