我有一个程序正在使用 select() 来轮询准备连接的套接字。
我有另一个绑定到套接字并发出 send() 命令的程序。
我的问题是文件描述符是否可以跨两个这样的可执行文件工作。
即,如果我将程序 A 中的文件描述符 5 添加到 FD_SET,并且程序 B 中的套接字 fd 为 5,这是否意味着该套接字上的 send() 将唤醒正在对包含 5 的 FD_SET 进行选择的程序 A?
谢谢
我有一个程序正在使用 select() 来轮询准备连接的套接字。
我有另一个绑定到套接字并发出 send() 命令的程序。
我的问题是文件描述符是否可以跨两个这样的可执行文件工作。
即,如果我将程序 A 中的文件描述符 5 添加到 FD_SET,并且程序 B 中的套接字 fd 为 5,这是否意味着该套接字上的 send() 将唤醒正在对包含 5 的 FD_SET 进行选择的程序 A?
谢谢
不,文件描述符编号是特定于进程的。在不同的进程中使用相同的 fd 编号没有隐含的影响。
给定进程(0-1023)支持大多数描述符(文件/套接字)(请参阅 /proc//limits 中进程支持的文件/套接字描述符的最大限制)。
前 3 个描述符(0、1 和 2)分别分配给 stdin、stdout 和 stderr。下一个值为 3 的描述符将被分配给下一个打开的文件/套接字描述符,并且可以达到 /proc 中指定的限制。注意:您还可以更改最大支持的描述符。
您可以在 /proc//fd 中查看给定进程打开的文件描述符列表。每个进程描述符/信号/事件范围仅特定于进程。
它与文件描述符编号无关。
如果您通过套接字通过连接发送,该连接的另一端是正在选择读取的套接字,则选择器将检测读取事件。