曾经遇到过好几个问题,都是与客户端或者服务端没有完整关闭socket相关的。在代码里,随处可见这类问题,只是隐藏较深,不容易暴露bug而已。
一个半关闭状态的socket,其发起关闭的一方状态是FIN_WAIT2, 另一方是WAIT_CLOSE
网上有几篇言简意赅的文章,拿来借鉴。
参考文档链接:
关于“远端已经关闭连接,为何socket send()还是返回成功?”的讨论
“Socket.Send() succeeds, but remote end point closed the connection“
- http://bytes.com/topic/c-sharp/answers/501034-socket-send-succeeds-but-remote-end-point-closed-connection
MSDN 上的文章: 正常的shutdown,linger 选项和和套接字关闭
“Graceful Shutdown, Linger Options, and Socket Closure”
- http://msdn.microsoft.com/en-us/library/ms738547