gpt4 book ai didi

c - 当操作系统在线程结束后进行垃圾回收时,TCP/IP 连接是否会自动关闭?

转载 作者:行者123 更新时间:2023-11-30 14:51:14 27 4
gpt4 key购买 nike

编写 C 程序时我很困惑...

我写的程序是一个客户端程序,功能很简单,就是向服务器端发送请求。

我在程序中初始化了一个套接字来与服务器通信。我认为我应该做的是在线程结束之前断开并销毁这个连接。否则会导致内存泄漏。因为虽然操作系统会对我的线程进行内存清理,但它只会清理分配给我的程序的内存,我认为套接字不会断开连接。

但是我发现了一个奇怪的事情......我的程序结束后,从我的服务器端,我使用 -netstat 命令来查看端口状态。这个套接字将立即关闭,我的服务器的超时时间是 60 秒,并且我设置了套接字属性的保持事件状态...我尝试在客户端程序中休眠 5 秒,发现套接字保持建立状态。

我认为在这种情况下,在我的服务器看来,这个套接字不会立即关闭,而是等待超时......

那么我客户端的端口释放了吗?谁干的?谁注意到我的服务器断开了这个套接字?我不知道...

有知道这方面情况的人可以告诉我吗?非常感谢

最佳答案

这取决于情况,一旦进程结束内核将​​发送连接关闭消息,如果假设内核没有收到响应,它将进入时间等待状态,并将在那里停留几分钟。如果收到响应,连接将立即关闭。基本上在你的情况下,你得到了响应,这就是套接字关闭的原因。获取 tcpdump 并检查你就会知道。

关于c - 当操作系统在线程结束后进行垃圾回收时,TCP/IP 连接是否会自动关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48443105/

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