在 Network.Socket 包中,有一個回顯服務器示例。在回顯服務器中,withFdSocket sock setCloseOnExecIfNeeded就在實際系結到套接字之前進行呼叫。相關功能如下:
open :: AddrInfo -> IO Socket
open addr = E.bracketOnError (openSocket addr) close $ \sock -> do
setSocketOption sock ReuseAddr 1
withFdSocket sock setCloseOnExecIfNeeded
bind sock $ addrAddress addr
listen sock 1024
return sock
完整的示例可以在Network.Socket 包檔案中找到。
這個電話的目的是什么?我的理解是withFdSocket創建一個與套接字關聯的檔案描述符,并setCloseOnExecIfNeeded在描述符上設定 CLOEXEC 標志。然而,這個描述符會立即被“丟棄”,并且不會對其進行任何處理。
我是否對檔案描述符始終存在并且withFdSocket只提供這個現有的描述符感到困惑,我們必須使用標志更新它以便在程式退出時關閉套接字?
uj5u.com熱心網友回復:
withFdSocket不創建Fd; 它只是讀取已經存盤在套接字資料結構中的那個。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/517120.html
