当 OS 在线程结束后进行垃圾回收时,TCP/IP 连接会自动关闭吗?
Does TCP/IP connection automatically closed when OS do a garbage collection after a thread end?
我在写C程序的时候被搞糊涂了...
我写的程序是客户端程序,功能很简单,就是向服务器端发送请求。
我在我的程序中初始化了一个套接字来与服务器通信。我想我应该做的是在线程结束之前断开并销毁这个连接。否则会造成内存泄漏。因为虽然OS会对我的线程进行内存清理,但它只会清理分配给我程序的内存,我认为套接字不会断开连接。
但是我发现了一件奇怪的事...当我的程序结束后,我从我的服务器端使用-netstat命令来查看端口状态。这个套接字将立即关闭,我的服务器超时是 60 秒,我设置了套接字的保持活动 属性... 我试图在我的客户端程序中休眠 5 秒,发现套接字保持建立状态。
我认为在这种情况下,在我的服务器看来,这个套接字不会立即关闭而是等待超时...
那我客户端的端口放行了吗?谁干的?谁注意到我的服务器断开了这个套接字?我不知道...
所以知道这件事的人能告诉我一些相关信息吗?
非常感谢
这取决于情况,一旦进程结束,内核将发送连接关闭消息,如果假设内核没有收到响应,它将进入时间等待状态,并且它将在那里停留很少的时间minute.if它得到响应,连接将得到关闭 immediately.Basically 在你的情况下,你得到了响应,这就是为什么套接字得到 close.take tcpdump 并检查你会知道的。
我在写C程序的时候被搞糊涂了...
我写的程序是客户端程序,功能很简单,就是向服务器端发送请求。
我在我的程序中初始化了一个套接字来与服务器通信。我想我应该做的是在线程结束之前断开并销毁这个连接。否则会造成内存泄漏。因为虽然OS会对我的线程进行内存清理,但它只会清理分配给我程序的内存,我认为套接字不会断开连接。
但是我发现了一件奇怪的事...当我的程序结束后,我从我的服务器端使用-netstat命令来查看端口状态。这个套接字将立即关闭,我的服务器超时是 60 秒,我设置了套接字的保持活动 属性... 我试图在我的客户端程序中休眠 5 秒,发现套接字保持建立状态。
我认为在这种情况下,在我的服务器看来,这个套接字不会立即关闭而是等待超时...
那我客户端的端口放行了吗?谁干的?谁注意到我的服务器断开了这个套接字?我不知道...
所以知道这件事的人能告诉我一些相关信息吗? 非常感谢
这取决于情况,一旦进程结束,内核将发送连接关闭消息,如果假设内核没有收到响应,它将进入时间等待状态,并且它将在那里停留很少的时间minute.if它得到响应,连接将得到关闭 immediately.Basically 在你的情况下,你得到了响应,这就是为什么套接字得到 close.take tcpdump 并检查你会知道的。