我在Linux中使用套接字和管道时遇到了问题。具体来说,我们调用pipe(),它分配下两个可用的文件描述符......让我们说10和11.然后我们在套接字上调用accept(),期望它分配12.相反,它分配11。
我们测试了一下,看来从pipe()返回的第二个FD总是可以被其他创建文件描述符的系统调用重用。
任何人都能解释一下吗?
答案 0 :(得分:4)
这意味着有人在调用管道之后和第二次系统调用之前的某个时间关闭了有问题的文件描述符。例如,如果你在管道的一端分叉一些其他进程来做东西,你可能会搞砸你的代码,这些代码关闭了另一个进程使用的管道的末端并关闭了管道的错误端。或者其他任何可能在某个文件描述符上调用close的东西可能会关闭错误的东西。
答案 1 :(得分:0)
也许标志SO_REUSEADDR用于管道,因此您没有看到文件描述符编号的增量?
修改:感谢 duck 和 darron 我的愚蠢回答。我正在读这个link,如果在文件描述符上调用close()
,它会被重用...
希望这有帮助, 最好的祝福, 汤姆。