在 C 中進行套接字編程時,我注意到有時fcntl()用于操縱套接字行為,而其他時候setsockopt()則使用。
例如,fcntl()用于使套接字非阻塞,但setsockopt()用于更改從套接字發送/接收資料時的超時時間。
關于為什么需要這兩個功能,是否有任何背景/直覺推理?
uj5u.com熱心網友回復:
套接字不是唯一可以使非阻塞的檔案描述符型別。從理論上講,你可以將任何檔案描述符為非阻塞(通過指定O_NONBLOCK當你open()的檔案),但它有可能是設定將被忽略(普通檔案或沒有實作非阻塞模式的特殊檔案)。所以非阻塞標志是通用檔案介面的一部分。
相比之下,套接字超時僅適用于套接字。您只能使用特定于套接字的介面設定它們,這一事實清楚地表明了這一點。(終端設備有兩個讀取超時屬性——VTIME 和 VMIN——它們的相關性很模糊,但語意卻大不相同。它們是通過termios介面設定的。)
很少有通用屬性可以使用fcntl. 有許多特定于某些型別檔案的屬性,并使用各種特定介面進行操作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/399426.html
上一篇:錯誤:無法找到要更新的行。自上次讀取以來,某些值可能已更改。將提供程式從SQLOLEDB更改為MSOLEDBSQL
下一篇:如何將函式附加到類的實體?
