在终止之前关闭套接字

时间:2014-10-06 02:39:17

标签: c++ linux sockets linux-kernel

当进程写入套接字时,内核会先将该数据存储在内部缓冲区中,然后再推送它。现在,如果进程在缓冲区中仍然存在数据的情况下终止(在关闭套接字之前),则内核不会将它们清除掉。

所以我的问题是:

当进程关闭套接字然后立即死亡时,我们是否会在缓冲区中丢失数据?当调用close套接字时,内核是否立即刷新缓冲区?

1 个答案:

答案 0 :(得分:1)

来自manpage for close

  

如果fildes引用套接字,close()将导致套接字被破坏。如果套接字处于连接模式,并且为具有非零延迟时间的套接字设置了SO_LINGER选项,并且套接字具有未传输的数据,那么close()将阻止最多为当前的逗留间隔,直到所有数据都被传输。