【发布时间】:2021-12-30 18:37:49
【问题描述】:
在 C 中进行套接字编程时,我注意到有时 fcntl() 用于操作套接字行为,而其他时候则使用 setsockopt()。
例如,fcntl() 用于制作socket non-blocking,但setsockopt() 用于更改timeout time when sending/receiving data from a socket。
对于为什么需要这两个功能有任何背景/直观的推理吗?
【问题讨论】:
-
fcntl()操作文件描述符,而setsockopt()操作套接字描述符。在 Unix 风格的操作系统下,这两种类型的描述符大部分是可互换的,但在其他操作系统(阅读:Windows)下,文件描述符和套接字描述符是不同/不兼容的对象类型,因此需要不同的 API 来处理。 (你可以问一个类似的问题并得到类似的推理:send()/recv()vsread()/write)
标签: c sockets posix nonblocking