2011-12-02 115 views
2

这是一个真正开放的问题,在这里“如何确保或保持套接字活着?”如何确保或保持套接字活着?

恐怕我不得不对这个未解决的问题说“抱歉”。但我仍然想问一些想法。

如何为应用程序提供端到端的解决方案,使应用程序知道两端的资源有限?

任何解决方案或建议,这里很好的赞赏。

+1

对于TCP套接字,我们可以设置保活到真正的,我们可以调整操作系统的保持活动时间间隔。 –

+0

@Wince John Wesley:是的,tcp socket有这个功能。但是,实时丢失连接时无法报告错误,请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/ms740476(v=vs.85).aspx请查找SO_KEEPALIVE部分。 – Daniel

+1

您不知道连接丢失的原因是因为您的计算机没有被告知。任何中间路由器可能会随时停止转发数据包,无论是否通知。 'SO_KEEPALIVE'主要帮助具有状态防火墙的路由器(这将是路由器停止转发的原因)。通过Keepalive,您的应用通常会在Keepalive未在超时时间内回复时得到通知,这是最好的可以实现的。 –

回答

1

我假设你的意思是一个TCP套接字。

您无法保证它在任何特定时间都处于活动状态。如果启用SO_KEEPALIVE不能满足您的需求,则需要在应用程序协议中执行自定义Keepalive数据包。

对于isntance,一些协议有一个可以使用的“NOOP”命令。

在Linux下(但不一定是其他操作系统),您可以修改在每个套接字使用SO_KEEPALIVE的存活时间间隔(见男子7 TCP)

+0

非常好,你提到关于“NOOP”。那么,这就像心跳检测机制。是的,它在应用程序方面。也许我们必须在会话层中实现这种机制。但是你知道,听到节拍的时间会消耗资源,这取决于检查的时间间隔。 – Daniel