正确关闭TCP套接字

lxg*_*xgr 10 sockets tcp

"优雅地"关闭TCP套接字的推荐方法是什么?

我已经了解了read()之前close()ing在我的主机缓冲区中的所有剩余数据可能会导致远程主机出现问题(他可能会丢失已经被激活但尚未读取的接收缓冲区中的所有数据通过他的申请).那是对的吗?

什么是避免这种情况的好方法?有没有办法告诉API,由于忽略了任何剩余的缓冲数据并关闭套接字,我并不真正关心数据丢失?

或者我是否必须在应用程序协议级别考虑问题并使用某种隐式或显式"传输结束"信号让对方知道关闭套接字以进行读取是否安全?

Dav*_*rtz 21

1)调用shutdown以指示您不会再向套接字写入数据.

2)read从插座继续,直到出现错误或连接已关闭.

3)现在close插座.

如果不这样做,可能会在仍有数据要读取时关闭连接.这将导致非常接近.

  • 1)关机(袜子,1),2)而(读(袜子,...)= 0)3)关闭(袜子)这是订单吗? (3认同)