GPS 및 기타 측지 센서를 모니터링하는 널리 배포 된 오픈 소스 서비스 데몬 인 GPSD를 유지 관리합니다. 이것은 IPv4와 IPv6 모두에서 포트 2947의 클라이언트 응용 프로그램 연결을 수신 대기합니다. 보안 및 개인 정보 보호를 위해 일반적으로 루프백 주소에서만 수신하지만 어떤 주소에서 수신 대기하도록하는 데몬에 -G 옵션이 있습니다.C 소켓 API를 사용하여 모든 IPV6 주소를 수신하는 방법
문제 : -G 옵션은 IPv4에서 작동하지만 IPv6로 작동시키는 방법을 알아낼 수 없습니다. 다양한 자습서 예제를 기반으로 작동해야하는 메서드는 주소가 이미 사용 중임을 나타내는 오류를 대신 생성합니다. IPv6 네트워크 프로그래밍 경험이있는 사람들로부터이 문제를 해결할 수있는 도움을 찾고 있습니다. 쉽게 NETSTAT -l가 확인 될 때
이 코드는 IPv4의에서 -G 및 비 -G 두 경우 모두 올바르게 작동이다.
이제 "case AF_INET6 :"다음에 398 행을 둘러보십시오. listen_global 옵션은 -G에 의해 설정됩니다. false이면 코드가 성공합니다. 같이 읽고 알 수없는 기여를 승계하여 다음과 같은 의견은, 현재이 :
나는 고개를 한 다양한 튜토리얼 예에 따르면/* else */
/* BAD: sat.sa_in6.sin6_addr = in6addr_any;
* the simple assignment will not work (except as an initializer)
* because sin6_addr is an array not a simple type
* we could do something like this:
* memcpy(sat.sa_in6.sin6_addr, in6addr_any, sizeof(sin6_addr));
* BUT, all zeros is IPv6 wildcard, and we just zeroed the array
* so really nothing to do here
*/
, 할당 "sat.sa_in6.sin6_addr = in6addr_any이라고;" 주석에도 불구하고 정확하며 컴파일됩니다. 그러나 -G를 사용하여 시작하면 수신 주소가 이미 사용되고 있다고 주장하지 않습니다.
할당은 "sat.sa_in6.sin6_addr = in6addr_any;"입니까? 명목상으로 여기에서 맞습니까? 그 밖의 무엇이 나는 놓친다?
데몬을 공격 해 보셨습니까? – jpalecek