首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

SO_LINGER选项只能处理发送?那么接受呢?解决方案

2012-05-28 
SO_LINGER选项只能处理发送?那么接受呢?我网络堆栈还有数据需要 recv ,但是此时已经调用 close ,那么我想

SO_LINGER选项只能处理发送?那么接受呢?
我网络堆栈还有数据需要 recv ,但是此时已经调用 close ,那么我想接受完后在CLOSE 怎么做? 看了下SO_LINGER 好像只能处理 send

[解决办法]
SO_RCVTIMEO设置接收超时吧
[解决办法]
发送端的责任,设置linger并且数据发送完毕后主动shutdown(SD_SEND),FIN报文会告诉接收端没有后续数据了
如果是阻塞模型,接收端的recv最终会返回0或者-1,接收端肯定不再有后续数据,从而不漏任何数据
[解决办法]
你接收端都close socket了,还想recv数据?
[解决办法]
整个过程应该是
发送端:send(data)→shutdown(SD_SEND)→直到recv()返回0或-1→closesocket()
接收端:recv(data)→直到recv()返回0或-1→shutdown(SD_SEND)→closesocket()
主要是通过shutdown(SD_SEND)来做同步

热点排行