最近自己再设计一款电视上墙,在rtsp 自动重连时候突然拔掉网线陷入死锁状态,后来用tcpview 查看 tcp socket 连接保持 ESTABLISH 状态不变,而且wsawaitformultievents 陷入死锁状态。

假如应用程式不使用 tcp 的 keepalive,在网线断开之后,以前建立的 socket 链接仍然会保持在
ESTABLISH 状态不会改变。实际上 tcp 协议对这部分是有所处理的,需要服务端程式,在配置 socket 属性时,
使用 keepalive option, 一旦有此配置,这些长时间无数据的链接会根据 tcp 的keepalive 内核属性,
在 > (tcp_keepalive_time (tcp_keepalive_probes * tcp_keepalive_intvl))
所对应的时间(单位为秒)之后,断开这些链接。