2017-02-24 13 views
-1

통신 중에 장치 연결이 끊어졌습니다. Bonjour는 긴 TTL로 로컬 캐시에 장치 항목을 유지하므로 장치와의 통신이 끊어지면 DNSServiceReconfirmRecord으로 전화를 걸어 네트워크에 연결될 때까지 기다려야합니다.Bonjour API를 사용하여 네트워크에서 장치가 손실되었습니다

DNSSD_API DNSServiceReconfirmRecord(
DNSServiceFlags flags, 
uint32_t  interfaceIndex, 
const char  *fullname, 
uint16_t  rrtype, 
uint16_t  rrclass, 
uint16_t  rdlen, 
const void  *rdata 
); 
내가 rdata 값을 얻을 수있는 방법

? 아무도 나를 DNSServiceReconfirmRecord 사용하는 방법을 안내 할 수 있습니까? 위의 기능에 대해서는 rdata을 제외한 모든 필수 정보가 있습니다.

+1

[지금까지 시도한 내용] (http://whathaveyoutried.com)을 보여주기 위해 질문을 편집하십시오. 문제가있는 코드의 [mcve]를 포함시켜야 특정 문제를 해결할 수 있습니다. 또한 [ask]를 읽어야합니다. –

답변

0

rrtype을 고려한 다음 적절하게 rdata을 제공해야합니다. Wiki에는 DNS 레코드 유형 목록이 있습니다. 포인터 rdata은 리소스 레코드의 원시 데이터를 가리켜 야합니다. 즉, 자체 레코드를 만들거나 할 수있는 라이브러리를 찾습니다.

예 :

rrtype == kDNSServiceType_PTR (kDNSServiceType_PTR = 12) 경우, rdataRFC 1035에 정의 된 "포인터 레코드"를 가리켜 야합니다.

+0

감사합니다. 위 예제에서 rdata를 어떻게 만들 수 있습니까? 나는 도서관에서 아무것도 찾을 수 없다. dnn-sd.h에만 액세스 할 수있는 창에서 작업하고 있습니다. – bbt

+0

다음과 같은 경우에 링크 된 RFC 또는 다른 정의를 따라야합니다.'rrtype! = kDNSServiceType_PTR' – Jonas

+0

NULL RDATA 형식으로 rdata를 설정합니다. 함수가 성공하지 못했고 -65541 오류를 반환하는 것을 볼 수 있습니다. 나는 와이어 샤크 추적으로 확인합니다. 이 함수가 호출되는 동안 패킷 전송이 없습니다. DNSServiceReconfirmRecord (kDNSServiceFlagsForce, 0, "xyz._xxx._udp.local", kDNSServiceType_PTR, kDNSServiceClass_IN, 27, bigNULL); – bbt