怪异 ****服务器端TCP 不发送关闭连接的请求****
客户端放在不同的机器,导致服务器没有发送 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。
使用短连接服务,一应一答。本来想同时支持长成长连接。