http://xidianzhangjun.blog.163.com/blog/static/11548877120114411056939/
哎,首先,又犯了一个大错,前几天把这个问题通过实验搞懂了,可是没有能够及时记录下来,今天突然想起来,想去总结一下,可是实验代码找不到了,只能通过记忆记录一下,改天再试验一下。
我的实验过程:
1.服务器端开启
2.客户端连接上服务器端
3.客户端主动关闭连接
4.服务器端用for循环一直write
出现的情况:服务器端write并不会立刻返回-1,而是write了几次之后才返回-1
总结: 要在服务器端判断客户端已经关闭了连接,可以用write的返回值判断。但是要注意的是:write只是把服务端应用层中的数据发送给TCP层发送缓存,然后由TCP层将应用层数据再发送给客户端TCP层,所以,当客户端关闭连接时,服务器端write并不会立刻返回-1。通过抓包工具抓包发现,客户端向服务器端发送FIN之后,服务器端TCP层还是向客户端发出了几个报文的,不过会收到客户端的RST。当服务端TCP层收到客户端TCP层发过来的RST报文之后,就会检测到对方已经关闭了连接,这时候再去write就会出错,中间是有一段延迟的!