2013-05-21 37 views
-3

我有一個客戶端服務器應用程序。客戶端向服務器發送命令並在UDP套接字通道上接收數據。
每次使用不同的ID創建套接字文件時。
我正在執行命令10000次使用腳本,我得到EBADF。 我懷疑的問題是close()沒有立即關閉套接字描述符。 我已閱讀關於SO_LINGER選項,但我認爲它適用於TCP套接字。如何確保UDP套接字已關閉?

有什麼辦法可以確保close()關閉套接字描述符。

感謝

+2

你爲什麼不斷打開和關閉UDP套接字?爲什麼不保持一個開放的程序的生命? – EJP

+0

這已經在現有的代碼中完成了。我無法改變它,並終身打開它。 –

+0

您可能想向我們展示有問題的代碼。 – alk

回答

3

這裏的實際問題是,你可能不檢查結果產生擺在首位的插座,或者你關閉套接字,然後再使用它,或損壞手柄價值,所以你以後遇到EBADF。 EBADF是之前編程錯誤的結果。不是沒有關閉。找出實際的錯誤。不要猜測。

+0

我在創建中獲得成功並在套接字上綁定,但問題仍然存在。 –

+0

*什麼*問題? EBADF什麼時候做*什麼?*這聽起來像只是你的代碼中的一個錯誤:在某處丟失了FD的價值,或者關閉它並繼續使用它。這裏沒有證據表明描述符泄漏或非關閉問題。 – EJP

+0

我在sendto()API中獲得EBADF。 socket()和fcntl()使我獲得成功。 –