2013-12-10 84 views
1

我寫了一個客戶端應用程序,它使用mdnsreponder進行某些服務發現。我有一個要求,我的客戶端IP會經常變化。每當IP發生變化時,我都需要再次進行發現。 所以我寫了一個簡單的測試應用程序,它將每1分鐘更改IP並進行發現。套接字sendto在udp數據包期間得到錯誤22

一切工作正常,但經過少量的IP更改(一些7-10次更改),它給出了以下插座錯誤。

(以下爲SENDTO socket函數在mdnsresponder代碼中的錯誤代碼)

mdnsplatformsend udp got error 22 . 

,我的要求會不會把它與新的IP接口上之後。

我不得不再次重新啓動我的應用程序,那麼只有它的工作原理...

有人可以幫助找出問題,爲什麼它停止了幾個試驗後?

+2

errno == 22是EINVAL(無效參數)。您正在將一個不正確的參數傳遞給sendto函數。你不會顯示你的套接字是綁定到INADDR_ANY(0)還是一個特定的適配器 - 因爲這可能是危險的。請告訴我們你的代碼。 – selbie

+0

由於您沒有向我們展示如何調用sendto()來包含傳遞參數的定義和初始化,我們只能猜測。我的第一個猜測是你傳遞了一個無效的套接字描述符。 – alk

回答

1

請重新檢查您傳遞的sendto函數的參數。當套接字綁定丟失時,可能會發生此錯誤。這意味着套接字綁定的地址已更改或無效。錯誤也可能是由於您傳遞的地址結構的大小錯誤導致的。

相關問題