Answers:
连接在一侧保持ESTABLISHED而在另一侧保持不存在,因为这是服务器重新启动后的状态。客户端不知道服务器重新启动,服务器不知道客户端认为它仍然连接。除非客户端尝试使用连接,否则它将永远保持这种状态。(除非启用了Keepalive,否则它通常会以这种方式保留两天左右。)
为什么客户端永远等待服务器?!客户端或协议都已损坏。如果客户端未遵循协议,则客户端将损坏。如果协议未指定如何检测死连接,则协议将被破坏。
TCP不会检测到未尝试发送数据的终端的死连接。因此,在TCP之上分层的每个协议都必须考虑到这一点。如果这种卡住的连接是不可接受的行为,那么这个协议就会被破坏,因为它允许这种不可接受的行为(或者客户端因为没有遵循协议而被破坏)。
协议规范是否真的要说要永远等待数据?如果是这样,我会质疑协议开发人员的理智。