2011-08-30 4 views
3

멀티 캐스트 UDP 메시지로 작업하고 있습니다. 수신 된 패킷의 목적지 IP 주소를 채널의 멀티 캐스트 주소와 비교할 필요가 있습니다. 수신기는 다른 멀티 캐스트 채널을 통해 멀티 캐스트 된 메시지를 수신하지 않도록 수신 대기하고 있습니다.부스트 라이브러리에서 수신 된 UDP 메시지의 대상 IP 주소 찾기

recvmsg()를 사용하여 UNIX 소켓을 사용하고 여기에 언급 된 모든 것을 수행하여 대상 IP 주소를 찾을 수 있음을 알고 있습니다. Get destination address of a received UDP packet.

하지만 부스트 라이브러리 ASIO 소켓을 사용하고 있지만 recvfrom() funcn에 해당하는 receive_from()이 있지만 recvmsg()와 비슷한 기능을 가진 func를 찾을 수는 없습니다. 아무도 여기 좀 도와 줄래 .. 부스트 라이브러리에서받은 패킷의 대상 IP 주소를 찾는 방법이 있습니까 ??

답변

0

한 걸음 뒤로 물러서십시오. 목적지 주소를보고 사용자 공간에서 필터링해야하는 이유가 무엇이라고 생각하십니까? 운영 체제가이 작업을 수행해서는 안됩니까? 아마해야 해!

실제로 원하지 않는 데이터 그램을 받고 있습니까? 그렇다면 리스너를 충분히 엄격하게 설정하지 않았기 때문일 수 있습니다. 예를 들어 특정 멀티 캐스트 그룹 (주소), 포트 및 인터페이스에만 바인딩하고 수신 대기해야합니다. 아마도 당신은 그 중 일부분을 지정하는 것을 게을리하지 않을까요? 그게 아니라면, 아마도 당신은이 질문을하게되는 일들을 설명 할 것입니다.

+0

멀티 캐스트 패킷이 라우터에 의해 해당 멀티 캐스트 채널에 가입 한 모든 수신자로 리디렉션되는 경우 하나의 시스템에서 여러 수신기가 실행되는 경우 모든 수신자는 처음에 가입 한 특정 수신자가 아닌이 패킷을 수신합니다 그 멀티 캐스트 채널. 이 부분은 사실입니다. 항상 발생합니다 – vinsal

+0

멀티 캐스트 데이터를 수신하지 않으려는 멀티 캐스트 수신기가 있다고 말하고 있습니까? 이 부분은 나에게 분명하지 않습니다. 데이터를받지 않으려는 이유는 무엇입니까? –

+0

수신자는 주소가 아닌 포트에만 바인딩 할 수 있기 때문에 포트에서 수신 대기하는 모든 수신자 (수신자)는 수신자를 확인하지 않아도 메시지를 수신합니다. 패킷의 IP 주소. – vinsal

0

대상 주소에 액세스 할 수없는 일반적인 해결 방법은 멀티 캐스트 그룹당 하나의 소켓을 열고 소켓을 응용 프로그램 내의 주소와 일치시키는 것입니다.