2009-08-13 2 views
4

시작시, 내 프로그램은 getifaddrs()를 호출하여 링크 로컬 IPv6 멀티 캐스팅에 사용할 수있는 네트워크 인터페이스를 찾습니다. 이것은 가능한 한 작동하지만 getifaddrs()가 반환 된 후 사용 가능한 네트워크 인터페이스 집합이 변경되는 경우는 처리하지 않습니다.getifaddrs() 결과가 변경 될 때 알림 메커니즘이 있습니까?

네트워크 인터페이스가 변경되면 OS가 내 프로그램에 알릴 수있는 방법이 있습니까? 그래서 getifaddrs()를 다시 호출하고 목록을 업데이트 할 수 있습니까? 아니면 getifaddrs()를 몇 초마다 조사 할 운명인가?

(참고 : Windows에서, 나는() 대신의 getifaddrs()의 GetAdaptersAddresses 부르지 만, 같은 문제가 존재하는) 당신은 아마 NotifyAddrChange 및 NotifyIpInterfaceChange 기능을 살펴 갖고 싶어

+0

몇 초마다 폴링해야하는 네트워크 인터페이스가 자주 바뀔 것이라고 생각하십니까? 가상 인터페이스에 대해 이야기하고 있습니까? –

+0

지금까지 우리는 프로그램을 실행 중이며 AirPort를 켜고 끄고, 유선 LAN 연결/연결 해제, HSPA 고속 무선 연결 활성화/비활성화 등 MacBook에서 주로 문제를 보았습니다. , 프로그램은 여전히 ​​비활성 인터페이스를 사용하려고 시도하고 새로 활성화 된 인터페이스를 사용하려고 시도하지 않으므로 오동작하기 시작합니다. –

+0

Dupe : http://stackoverflow.com/questions/579783/how-to-detect-ip-address-change-programmatically-in-linux –

답변

2

관심이있는 경우, 네트워크 구성이 변경 될 때 알림을받는 방법을 설명하는 Apple 개발자 사이트에서 다음 문서를 발견했습니다. 그것은 사소한 일이 아니지만, 저를 위해 일하는 기술을 얻었습니다. 특히 Listing 8을 참조하십시오.

Technical Note TN1145 - Living in a Dynamic TCP/IP Environment"

+0

위의 링크가 이제 죽었다고 생각합니다.이 URL에서 찾았습니다. http : //developer.apple.com/library/mac/#technotes/tn1145/_index.html – Steg

3

또한,이를 구현하기 위해서 리눅스 방법은 예제 코드와 같이 가족 AF_NETLINK 및 하위 유형 NETLINK_ROUTE의 소켓을 열고 커널에서에 도착하는 메시지를 읽을 것입니다 사람 "에 포함 7 netlink ". (Rob Searce가 저를 가리켜 주신 것에 감사드립니다.)