fd 控制代碼 如何檢測無效的fd 控制代碼

2021-10-21 08:23:50 字數 795 閱讀 5767

我有乙個伺服器應用程式,它使用非同步i / o處理網路客戶端.接受客戶端連線,然後將其新增到描述符集,該描述符集可以使用poll / epoll / select / etc進行監視.我正在使用apr_pollset_poll()apache apr庫呼叫來檢查可以讀取或寫入的描述符.這在內部使用epoll / poll / select / etc,具體取決於平台.

問題是,其中乙個套接字描述符被破壞,apr_pollset_poll返回errno 10038,這是wsaenotsock:嘗試對不是套接字的東西進行操作.不幸的是,這導致我的應用程式完全停止工作,而不僅僅是能夠踢出特定的客戶端連線.

如果我可以以某種方式忽略或從描述符集中刪除此套接字,那麼它可以繼續執行並正確讀/寫其他套接字.我知道我應該找到導致套接字損壞的根本原因,但我需要乙個故障安全的解決方法.

一旦將描述符新增到pollset,然後由os /核心處理這些描述符,我認為無法檢索它們以便能夠迭代.在我自己的列表中維護這些也可能會進一步產生其他問題,因為在socket關閉時我需要以某種方式清理它們,這對於核心內的pollset會自動發生.

有什麼建議?

最佳答案 這聽起來很可怕,但是當它發生時就是緊急情況.因此,我建議您瀏覽工作pollset中的所有描述符,並嘗試對該描述符執行操作,如果描述符是偽造的,將觸發該錯誤.例如,您可以建立乙個新的臨時pollset並嘗試非阻塞零超時輪詢操作,看看是否可以獲得錯誤.

通過隔離乙個描述符,您可以決定需要做什麼以及如何做.如果/當問題再次出現時,您可以重複隔離過程.顯然,除非您首先發現問題,否則不會嘗試此操作.但是當事情出錯時,你需要隔離問題,而這應該(應該)實現.

fd 控制代碼 Linux下檢視控制代碼

檢視各個分割槽的控制代碼數 df ih 檢視控制代碼最大數 ulimit n 檢視23711程序連線控制代碼數 lsof n awk sort uniq c sort nr more grep 23711 檢視所有程序控制代碼數 lsof n awk sort uniq c sort nr more...

檔案描述符FD的含義 檔案控制代碼

使用sudo lsof np itcp stcp listen檢視占用埠的程式 因為 lsof 需要訪問核心記憶體和各種檔案,所以必須以 root 使用者的身份執行它才能夠充分地發揮其功能 檔案控制代碼是windows系統的概念,在linux下稱之為檔案描述符fd file description ...

已知程序控制代碼,如何知道此程序的主視窗控制代碼

已知程序控制代碼,如何知道此程序的主視窗控制代碼,在此說明兩種方法 1.呼叫findwindow 前提是必須知道該程序中視窗類名和視窗名,返回後的控制代碼可以通過iswindow 函式來驗證是否是有效的視窗控制代碼.hwnd hwnd findwindow szclassname,szwndname...