“优雅地”关闭TCP套接字的推荐方法是什么?
我已经了解了read()之前close()ing在我的主机缓冲区中的所有剩余数据可能会导致远程主机出现问题(他可能会丢失已经被激活的接收缓冲区中的所有数据,但不会但他的申请已被阅读)。这是对的吗?
避免这种情况的好方法是什么?是否有一些方法可以告诉API,由于我忽略了任何剩余的缓冲数据并关闭套接字,我并不真正关心数据丢失?
或者我是否必须在应用程序协议级别考虑问题并使用某种隐式或显式“传输结束”信号让对方知道关闭套接字以进行读取是否安全?
答案 0 :(得分:20)
1)调用shutdown
表示您不会再向套接字写入数据。
2)从套接字继续read
,直到出现错误或连接已关闭。
3)现在close
套接字。
如果您不这样做,您可能会在仍有数据要读取时关闭连接。这将导致非常接近。