2012-05-19 3 views
3

У меня есть приложение (написанное на C/C++), которое передает UDP между многими хостами Windows и Linux внутри локальной сети (через winsock/Linux-Sockets). Я использую только один порт, и только один Socket на каждом хосте. Некоторые сообщения - Broadcastet, ответы часто одноадресные, но некоторые из них также широковещательные. Everthing работает до сих пор, но:Как провести различие между широковещательными передачами UDP и Unicast?

Как я могу узнать, был ли полученный мной Paket (через recvfrom) широковещательный или одноадресный?

Единственное, что я нашел, это отправить эту информацию внутри полезной нагрузки или использовать разные порты. И не очень приятно ...

+0

В любом случае, вы можете вообще обмануть людей, передав их на уровне Ethernet и используя одноадресный адддресс на уровне IP или наоборот. – Flexo

ответ

3

На стороне Linux вы можете установить PKT_INFOip(7) опцию сокета с setsockopt(2), а затем использовать recvmsg(2) для получения адреса назначения пакета UDP.

+0

Это то, что я искал. В Windows 'WSARecvMsg' выполняет эту работу. Спасибо! – trtracer