2013-12-10 5 views
1

일부 서비스 검색에 mdnsreponder를 사용하는 하나의 클라이언트 응용 프로그램을 작성했습니다. 클라이언트 IP가 매우 자주 변경된다는 요구 사항이 있습니다. IP에 변경이있을 때마다 다시 발견해야합니다. 그래서 1 분마다 IP를 변경하고 검색을 수행하는 간단한 테스트 응용 프로그램을 작성했습니다.소켓 sendto는 udp 패킷 중에 오류 22를 얻습니다.

모든 것이 잘 작동하지만 몇 가지 IP 변경 (일부 7-10 시간 변경) 후에 소켓 오류가 발생합니다.

내 요청이 새로운 IP와의 인터페이스에 넣어하지 않습니다 후

mdnsplatformsend udp got error 22 . 

(아래에는 mDNSResponder 코드 sendto를 소켓 함수의 오류 코드입니다).

다시 내가 만 작동, 내 응용 프로그램을 다시 시작해야합니다 ...

누군가가 문제를 파악하는 데 도움이 수, 이유는 몇 가지 실험 후 중지합니까?

+2

errno == 22는 EINVAL (잘못된 인수)입니다. 잘못된 매개 변수를 sendto 함수에 전달 중입니다. 소켓이 INADDR_ANY (0) 또는 특정 어댑터에 바인딩되어 있는지 표시하지 않습니다. 귀하의 코드를 보여주십시오. – selbie

+0

전달 된 매개 변수의 정의와 초기화에서'sendto()'를 어떻게 호출하는지 보여주지 않으므로, 우리는 추측 할 수밖에 없습니다. 내 첫 번째 추측은 잘못된 소켓 설명자를 전달하는 것입니다. – alk

답변

1

전달할 sendto 함수의 매개 변수를 다시 확인하십시오. 이 오류는 소켓 바인딩이 손실되었을 때 발생할 수 있습니다. 즉, 소켓이 바인드 된 주소가 변경되었거나 유효하지 않습니다. 전달하는 주소 구조의 크기가 잘못되어 오류가 발생할 수도 있습니다.