在 Linux 系统上使用 C 套接字库...
当我调用 accept( )
时,它总是返回一个整数。 STDIN
是 0。通常我的第一个接受调用返回 3。之后它们会递增。
我想知道; accept( )
如何确定下一个整数是哪个?如果在另外 2 次 accept( )
调用之后,我将 3、4 和 5 个分配给已连接的客户端;当4断开连接时会发生什么?下一个整数是 4 还是 6?
如果有人能阐明这一点,我肯定会很感激。
最佳答案
它使用下一个当前未打开的文件描述符,与open()
和其他返回文件描述符的系统调用相同; dup2()
是该模式的一个异常(exception)。 (例如,文件描述符可能未打开,但如果它是尚未完全清理的网络连接的一部分,则可能仍然无法重用。)(更新:删除文本恢复原始版本的答案。如果文件描述符关闭,则可以重用。由于 TCP/IP 中的 FIN-WAIT 状态,重用套接字地址可能会出现问题 - 但套接字地址是不是文件描述符。)
如果描述符 1-5 打开,然后关闭 4,则下一个类似打开的操作将返回 4。
可能存在安全意识系统,但这不是模式,但这不太可能。一个原因是有正确的代码来处理 I/O 重定向,该代码依赖于关闭标准输入(文件描述符 0)以及重用文件描述符的下一个类似打开的操作;重复标准输出(文件描述符 1)。
关于c - Accept() 如何确定返回哪个整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6076694/