我有一個客戶端服務器應用程序。客戶端向服務器發送命令並在UDP套接字通道上接收數據。
每次使用不同的ID創建套接字文件時。
我正在執行命令10000次使用腳本,我得到EBADF
。 我懷疑的問題是close()
沒有立即關閉套接字描述符。 我已閱讀關於SO_LINGER選項,但我認爲它適用於TCP套接字。如何確保UDP套接字已關閉?
有什麼辦法可以確保close()
關閉套接字描述符。
感謝
我有一個客戶端服務器應用程序。客戶端向服務器發送命令並在UDP套接字通道上接收數據。
每次使用不同的ID創建套接字文件時。
我正在執行命令10000次使用腳本,我得到EBADF
。 我懷疑的問題是close()
沒有立即關閉套接字描述符。 我已閱讀關於SO_LINGER選項,但我認爲它適用於TCP套接字。如何確保UDP套接字已關閉?
有什麼辦法可以確保close()
關閉套接字描述符。
感謝
這裏的實際問題是,你可能不檢查結果產生擺在首位的插座,或者你關閉套接字,然後再使用它,或損壞手柄價值,所以你以後遇到EBADF。 EBADF是之前編程錯誤的結果。不是沒有關閉。找出實際的錯誤。不要猜測。
我在創建中獲得成功並在套接字上綁定,但問題仍然存在。 –
*什麼*問題? EBADF什麼時候做*什麼?*這聽起來像只是你的代碼中的一個錯誤:在某處丟失了FD的價值,或者關閉它並繼續使用它。這裏沒有證據表明描述符泄漏或非關閉問題。 – EJP
我在sendto()API中獲得EBADF。 socket()和fcntl()使我獲得成功。 –
你爲什麼不斷打開和關閉UDP套接字?爲什麼不保持一個開放的程序的生命? – EJP
這已經在現有的代碼中完成了。我無法改變它,並終身打開它。 –
您可能想向我們展示有問題的代碼。 – alk