tcp socket突然关闭连接
Posted
技术标签:
【中文标题】tcp socket突然关闭连接【英文标题】:Tcp socket suddenly closing connection 【发布时间】:2011-05-01 21:55:16 【问题描述】:我有一个聊天站点 (http://www.pitput.com),它通过套接字连接连接用户。 我在客户端有一个 flash 对象,它打开到我的服务器端口的连接。 在服务器中,我有一个服务正在异步监听该端口。
一切正常,除非我在一段未知时间(大约几分钟)后与某人交谈,服务器正在关闭我的连接并且我在服务器中收到错误: " 连接尝试失败,因为连接方在一段时间后没有正确响应,或者连接建立失败,因为连接的主机没有响应"。
我不知道 tcp 套接字究竟是如何工作的。它是否每隔几秒钟检查一次“实时”连接?它如何决定何时关闭连接?我很确定关闭操作不是来自客户端。
谢谢。
【问题讨论】:
这种情况是每次您暂停几分钟,还是偶尔会发生? 【参考方案1】:听起来服务器正在处理连接但没有响应。这就是我通常拉出WireShark 以了解发生了什么的地方。
【讨论】:
【参考方案2】:TCP/IP 确实有一个检查实时连接的选项;它被称为“保活”。 Keepalive 几乎从未使用过。默认情况下未启用它们。它们可以通过调整注册表在系统范围内启用,但 IIRC 的最低超时时间为 1 小时。它们也可以在单个套接字上启用(超时以分钟为单位),但您会知道您的应用程序是否这样做。
如果您正在使用 Web 服务并且您的客户端正在连接到 HTTP/HTTPS 端口,那么它可能会被 HTTP 服务器关闭(通常会在几分钟的空闲时间后关闭它们的连接)。也有可能中间路由器可能会在一段空闲时间后代表您将其关闭(这不是默认行为,但有时会为公司路由器配置此类“有用”设置)。
如果您使用的是 Win32 服务,那么实际上听起来客户端正在断开连接或失去其网络(例如,移动到无线路由器的范围之外)。在后一种情况下,客户端可能没有注意到连接已关闭(这种情况称为"half-open");服务器看到关闭,但客户端认为连接仍然存在。
【讨论】:
【参考方案3】:这是由某家公司托管的 ASP Web 服务吗?如果是这样,服务器通常每 10 到 20 分钟回收一次应用程序。您不能让 Web 服务无限期运行,除非它是您自己的服务器(我相信)。
【讨论】:
以上是关于tcp socket突然关闭连接的主要内容,如果未能解决你的问题,请参考以下文章
tcp连接过程: 为啥一个socket在connect之后关闭,再复用端口重建socket执行listen此时对方连接不上呢