读书人

SO_LINGER选项只能处理发送?那么接受

发布时间: 2012-05-28 17:59:33 作者: rapoo

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)来做同步

读书人网 >VC/MFC

热点推荐