现象上位机与W5500设备异常断开连接后无法重连导致问题产生的可能性TCP通讯异常物理链路断开都有可能导致这个问题复现。问题分析W5500侧 正常 处在 ESTABLISHED 态但是由于网络问题导致W5500未退出ESTABLISHED 再次重连时socket占用从而无法重连修改难点W5500侧设备是其他公司的产品无法修改其代码。按照道理来说是需要嵌入式设备增加可靠性的但是现在确实没办法。取巧解决方法在异常后在QT上位机侧强制关闭socketmodbus_tcp::forceCloseWithReset()会尝试强制关闭旧 socketintsockmodbus_get_socket(ctx_);setsockopt(sock,SOL_SOCKET,SO_LINGER,{1,0});closesocket(sock);// Windows// close(sock); // Linux/macOSmodbus_set_socket(ctx_,-1);modbus_free(ctx_);ctx_nullptr;SO_LINGER(0)的作用是关闭 socket 时尽量发送 TCPRST而不是正常FIN关闭。如果 W5500 能收到这个RST它应该立即释放旧ESTABLISHED连接。然后再重新进行连接重连时优先绑定同一个本地端口再连接 W5500这样新连接尽量复用原来的 TCP 四元组PC_IP : PC_旧本地端口 - W5500_IP : 502这个策略的目的如果 W5500 卡住的是旧四元组连接新 SYN 使用同一个四元组时更有机会让 W5500 释放或覆盖旧会话。