【发布时间】:2014-01-23 07:24:20
【问题描述】:
客户:
socket(), connect() and then
for (1 to 1024) {
write(1024 bytes)
}
exit(0);
服务器:
socket(), bind(), listen()
while (1) {
accept()
while((n = read()) {
if (n == -1) abort(); /* never happended */
total_read += n
}
close()
}
现在,客户端在 NAT 下的 Mac 上运行,服务器在我的 VPS(国外)上运行
一般来说,它工作正常(客户端发送所有数据并退出&服务器接收所有数据)
但是,当客户端正在运行但突然网络中断几分钟(并重新恢复)时,客户端不会在很长一段时间后退出......我用 control + C 杀死它并再次运行它,服务器似乎不再读取数据(客户端仍在运行)
这是 netstat 显示的内容:
客户:
tcp4 0 130312 192.168.1.254.58573 A.B.C.D.8888 ESTABLISHED
服务器:
tcp 0 0 A.B.C.D:8888 a.b.c.d:54566 ESTABLISHED 10970/a.out
tcp 102136 0 A.B.C.D:8888 a.b.c.d:60916 ESTABLISHED -
A.B.C.D 是我的 VPS 地址 a.b.c.d 是我的公共客户地址
我的问题是:
1,为什么?
2,服务器重启后就可以正常工作了,如何编写代码来摆脱它而不重启?
【问题讨论】:
标签: sockets tcp network-programming