如何“优雅地”关闭TCP套接字?
我了解到,在读取主机缓冲区中所有剩余数据之前进行close()可能会对远程主机造成问题(他可能会丢失已被确认但尚未被其应用程序读取的接收缓冲区中的所有数据)。这正确吗?
有什么好的方法可以避免这种情况吗?是否有一些方法可以告诉API我并不真正关心由于忽略任何剩余缓冲数据并关闭套接字而导致的数据丢失?
或者,我必须在应用程序协议层面考虑这个问题,并使用某种隐式或显式的“传输结束”信号来让另一方知道可以安全地关闭读取套接字吗?
1) 调用 shutdown
函数来表明你将不再向套接字中写入任何数据。
2) 持续从套接字中 read
数据,直到出现错误或连接关闭。
3) 现在,close
套接字。
如果你不这样做,可能会在还有数据需要读取时关闭连接,导致不正常的关闭。
close
。 - David Schwartz