bad file descriptor的解決辦法

2021-10-09 13:15:23 字數 759 閱讀 6050

socket建立套接字之後,返回的市乙個整型 值,對應的是程序描述字的索引號。

檔案描述符數量是有限的,不停的建立套接字,當然會消耗完,導致open失敗。

就是你open時產生的控制代碼之類的dd(對於你的情況就是 fd=socket()),然後不釋放或關閉時,當達到作業系統支援的最大值時,就無法再開啟了。在solaris上可以ulimit修改最大值。

伺服器使用select()模型,把可讀的套接字及可寫的套接字分別放入共享記憶體的讀套接字佇列及寫套接字佇列。由兩個子程序從共享記憶體中讀出可讀和可寫套接字分別處理讀套接字和寫套接字。

問題:客戶端連上伺服器後向伺服器傳送資料,伺服器主程序把可讀的套接字放入共享記憶體的讀套接字佇列中,然後子程序從共享記憶體中讀出套接字,然後用該套接字呼叫recv()讀資料。程式返回錯誤,錯誤碼提示是bad file descriptor。請問是什麼原因呢?

另外想問fd_isset(),

select(maxfd + 1, &readset, &writeset, null, null);

某個連線上來的套接字connectfd,客戶端並沒有傳送任何資料,為什麼用fd_isset(connectfd, &readset)判斷總是返回該套接字可讀呢?

在子程序建立之後,父程序又開啟的新的套接字子程序應該無法再直接使用了。

父程序裡的連線,檢測到資料後,子程序去recv?

這樣應該不行吧?每個程序都有緩衝區資料,select檢測到的資料又不在子程序的緩衝區,不能用子程序去讀吧。你可以在父程序裡讀出來後,寫入共享記憶體,給子程序。

daemon not running的解決辦法

有時候,當我們執行 adb devices 或者 adb start server 的時候,會出現下面的情況 daemon not running.starting it now on port 5037 adb server didn t ack failed to start daemon 查一...

Could not launch app 解決辦法

xcode 的bug 解決方法一 targets general signing 下重新勾選automatically manage signing 解決方法二 1 拔掉裝置,刪除之前build的內容 2 退出xcode,不是關閉視窗 3,刪除下面目錄下的資料夾 users library deve...

make menuconfig錯誤的解決辦法

如果使用make menuconfig的方式配置核心,又碰巧系統沒有安裝ncurses庫 ubuntu系統 預設就沒有安裝此庫 就會出現錯誤,錯誤資訊大體上如下 unable to find the ncurses libraries or the required header files.mak...