【发布时间】:2023-03-06 00:30:01
【问题描述】:
我发现在 Linux 中同时使用套接字和管道存在问题。具体来说,我们调用 pipe(),它分配接下来的两个可用文件描述符……比如说 10 和 11。然后我们在套接字上调用 accept(),期望它分配 12。相反,它分配了 11。
我们进行了一些测试,似乎从 pipe() 返回的第二个 FD 始终可供其他创建文件描述符的系统调用重用。
谁能解释一下?
【问题讨论】:
-
明确一点 - 您已经检查了管道调用的返回码,一切都很好吗?你没有用 fork() 或任何东西做任何时髦的事情吗?只是一个直接的 pipe() 调用,然后是一个 accept()?
-
@Duck 只是为了指出一些事情,他确实在套接字上说了 accept() ......因此我编辑了我的答案......