TCP服务器端怎么判断客户端已经关闭了连接?

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就会出错,中间是有一段延迟的!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值