簡體   English   中英

孩子在分叉后寫在父級中創建的文件描述符上

[英]Child write on file descriptors created in parent after fork

我有一個父進程,它偵聽套接字上的傳入連接,並在接受客戶端后,它將關聯的文件描述符和其他日期傳遞給子進程(通過命名管道)。

從這一刻起,子進程將為客戶端提供服務,而父進程將繼續監聽新的客戶端。

我的問題是,當我嘗試在子進程中寫文件描述符時,我將收到錯誤消息(錯誤的文件描述符),並且寫入失敗。 我的猜測是,由於這些文件描述符是在fork之后創建的,因此子級不能簡單地使用它們,它們僅屬於父進程。

那么這是寫失敗的原因嗎? 有沒有可能讓孩子使用這些文件描述符?



正如loreb的答案中提到的那樣,不可能以這種方式實現所需的結果。 我通過使用另一個管道將響應從子級引導到父級來進行了臨時修復。 由於文件描述符屬於父級,因此它可以通過套接字將響應轉發回客戶端。

要傳遞文件描述符,您需要使用AF_UNIX套接字,而不是命名管道。 您將需要sendmsg(3),它非常不可思議,因此您最好在網絡上查找一些示例-例如libowfat中的io_passfd。

編輯:萬一有人偶然發現了這個答案,請不要使用AF_UNIX客戶端/服務器,請使用socketpair(2)

也許您應該嘗試關閉並重新打開該FD。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM