背景:
我有一些代码连接到服务器来提取数据.但是,在某些时候程序进入了无法连接到服务器的状态.我们看到的问题是,当我们尝试重新连接时,服务器不断超时.
插件:
我们将超时设置为我们的网络插件(Thrift插件)使用的默认值.这些值是100k毫秒超时和300k毫秒读写超时.不完全是短暂的超时.此外,每次我们尝试重新连接时,我们都会重新创建插件的类,因此无论每次我们尝试重新连接时,内部设置的值都会重置.我认为超时不是问题.我相信插件不是问题.
网络:
我们看到这些重复超时发生了半个小时.当我们重新启动服务(而不是机器)时,它立即重新上线.所以,我知道这不是一个网络问题.这让我相信我们的代码中的某些内容正在进入无效的网络状态.此外,这是一个我们无法控制的状态,因为我们的插件隐藏了我们所有的好网络内容 - 包括超时,保持标记和连接组(以及其他).我们基本上无法访问HTTPWebReqest成员.
问题:
当我们的网络设置进入此状态时,我们会尝试关闭所有连接并重新连接到服务器.目标是杀死所有活动连接,以便重置我们进入的状态.但是,当我们尝试重新连接时,我们的重新连接会超时.
不知何故(可能是由于KeepAlive和TCP Pipelining,我们无法控制),即使我们关闭了所有连接,网络连接仍保持打开状态.这使我们处于不良状态并阻止我们将连接循环到服务器.
问题:
我如何杀死服务器的所有底层连接以强制重新连接?