当进程向套接字写入数据时,内核会首先将这些数据存储在内部缓冲区中,然后再将其推送出去。现在,如果进程在关闭套接字之前终止(但缓冲区中仍有数据),内核不会费心将它们刷新出去。
那么我的问题是:
当进程关闭套接字并立即终止时,我们是否处于可能丢失缓冲区中数据的情况下?内核是否会在调用关闭套接字时立即刷新缓冲区?
那么我的问题是:
当进程关闭套接字并立即终止时,我们是否处于可能丢失缓冲区中数据的情况下?内核是否会在调用关闭套接字时立即刷新缓冲区?
来自 close
函数的手册页:
如果
fildes
指向一个套接字,close()
将导致该套接字被销毁。如果套接字处于连接模式,并且SO_LINGER
选项已设置为非零逗留时间,则close()
将阻塞最多当前逗留间隔时间,直到所有数据都传输完毕。