gpt4 book ai didi

linux - Linux 套接字编程的最佳实践

转载 作者:太空宇宙 更新时间:2023-11-04 09:42:09 25 4
gpt4 key购买 nike

我有一个简单的 C 服务器,它接受我尝试使用 telnet 或 netcat 连接的连接。每次收到连接时,我都会打印出描述符并在子进程中关闭连接。

我运行一个 netcat 实例,连接到服务器,断开连接 (Ctrl^C),然后重复几次。在服务器端使用的描述符上打印的值是 4、5、6、7 .. 并且它还在增加。

我尝试在一段时间后重复此练习,但数值仍在不断增加。我担心我的描述没有关闭(尽管明确调用关闭)。

我应该处理一些信号,设置处理程序以关闭连接吗?

最佳答案

fork 之后,子进程有一组父进程的文件描述符。所以正确的程序是,在 fork 之后,(1) 关闭子进程中父进程的 listening 套接字,并 (2) 关闭子进程继承的新 connection socket在 parent 中。

打开的文件描述符由内核引用计数。因此,当 child 继承连接套接字时,引用计数为 2。在父关闭连接套接字后,计数保持为 1,直到 child 完成并关闭它。然后引用计数下降到 0,然后关闭连接。 (省略了一些细节。)

结果是,进行此更改后,您会在父级中看到很多等于 4 的 FD,因为即使子级正在处理多个连接,同一个 FD 将继续打开/关闭/重用。

关于linux - Linux 套接字编程的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20334091/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com