怪异 ****服务器端TCP 不发送关闭连接的请求****

hzhxxx 2013-10-31 02:28:59
客户端放在不同的机器,导致服务器没有发送 FIN 包(服务器没有触发 0 == read),使用下面命令抓包,已经确认服务器发送缓冲区已经没有数据了
tcpdump tcp port 16888 and host 169.254.10.11 -ieth0 -n
13:26:22.911398 IP 169.254.10.11.51770 > 169.254.10.12.16888: Flags [.], ack 204813, win 1041, options [nop,nop,TS val 277626804 ecr 364061600], length 0
13:26:22.911972 IP 169.254.10.11.51770 > 169.254.10.12.16888: Flags [F.], seq 50, ack 204813, win 1041, options [nop,nop,TS val 277626805 ecr 364061600], length 0
13:26:22.951923 IP 169.254.10.12.16888 > 169.254.10.11.51770: Flags [.], ack 51, win 114, options [nop,nop,TS val 364061643 ecr 277626805], length 0

服务器和客户端部署在一台机器,双方都能正常的结束连接,使用下面命令抓包
tcpdump tcp port 16888 and host 169.254.10.12 -ilo -n
14:09:23.511229 IP 169.254.10.12.33692 > 169.254.10.12.16888: Flags [.], ack 204813, win 384, options [nop,nop,TS val 364045659 ecr 364045659], length 0
14:09:24.818737 IP 169.254.10.12.33692 > 169.254.10.12.16888: Flags [F.], seq 50, ack 204813, win 384, options [nop,nop,TS val 364046967 ecr 364045659], length 0
14:09:24.818786 IP 169.254.10.12.16888 > 169.254.10.12.33692: Flags [F.], seq 204813, ack 51, win 256, options [nop,nop,TS val 364046967 ecr 364046967], length 0
14:09:24.818798 IP 169.254.10.12.33692 > 169.254.10.12.16888: Flags [.], ack 204814, win 384, options [nop,nop,TS val 364046967 ecr 364046967], length 0

服务器使用 epoll 做 IO 多路复用,使用非阻塞 socket,服务器只要应答超过
200K 一个包,服务器肯定收不到 read==0 的消息,客户端使用阻塞socket。
使用短连接服务,一应一答。本来想同时支持长成长连接。
...全文
178 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
hzhxxx 2013-11-01
  • 打赏
  • 举报
回复
呵呵,问题找到了。 是同事写的代码把读事件干掉了。。
max_min_ 2013-10-31
  • 打赏
  • 举报
回复
tcp协议不管你应用层怎么搞, 如果需要的话,它都会发送关闭连接请求的! 你的问题能否重现?用wireshake抓包再分析下,或者你用命令行生成文件的形式看, 直接这样看,信息刷都没了!

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧