TCP连接的异常断开情况的讨论:
(假设两个不同主机系统C、D的进程CT,DT存在一个TCP连接)。
1。进程异常终止。
CT异常终止而C正常,TCP连接被C关闭掉并立即告之D,DT会很快得知此TCP连接被异常关闭。在编程时此类异常会在一次Socket调用中得知,程序员可以简单的进行处理。
2。系统异常终止。
这包括主机系统死机,和主机网络硬件断开(比如,拔掉网线)两种情况。假设C系统异常,此时D无法知道此TCP连接的失效,并一直认为连接正常。这种情况在编程时会变的非常糟糕,因为TCP连接将一直被认为有效,所有对此TCP Socket的调用都会正确返回,这显然是错误的。这种错误情况通常会持续很久,即便是设置了Socket的SO_KEEPALIVE属性,默认情况也要等上2个小时。如果DT是FTP之类的服务器程序倒也无妨(一个连接存在2个小时对它没有多大影响),如果是需要实时知道连接用户状态的即时通讯类服务器则就成问题了。
前者的问题并不一定需要解决,后者的解决方法一般是服务器程序和客户端程序达成某种协议,客户端定时向服务器发送很小的数据包(记为‘在线状态更新’)来告诉自己的状态,而服务器端程序则需要在每次收到用户的‘在线状态更新’后更新用户超时的时间计数,当用户的时间计数超过指定时间,就可以认为这个用户已经‘系统异常终止’,而终止之间的连接,并转告其他用户。
再讨论一下CT,在系统死机时CT肯定也死了也就没有处理的必要,在网络硬件断开情况下它的形势和DT一样,它也会等,处理方法也可以采用DT的处理方法。
(
语文没学好)