ch32v208 网线断开

请问, tcp连接后,网线断开, 要做什么处理? 发现再连接没反应

您好,关于使用EVT TCP例程拔掉网线再连接后,程序中在检测到TCP Timeout后会重新创建Socket进行连接,如下图1。你可以用WireShark抓包看一下,如下图2,拔掉网线再连接后,主机会向设备发送一个RST,会重新进行连接。后续若有问题,可通过邮箱(lzs@wch.cn)和我沟通。关于重新连接,这个过程可能要等10s左右,若要缩短这个时间,可以修改一下程序中keepalive的值,如下图3。关于这三个值的介绍,在EVT协议栈库说明中有相关介绍。

image.png

图1

image.png

图2

image.png

图3



拔网线

if (intstat & GINT_STAT_PHY_CHANGE)                           //PHY status change

    {

        i = WCHNET_GetPHYStatus();

        printf("phy state %d\n", i);

这里是能获得状态改变的。 我能否在这里关闭,然后重新listen ? 要怎么做?



您好,此处主要对PHY状态查询,在程序其他地方有检测超时重新创建链接。若你那边无法自动重连,可以把你抓包数据发我看一下。

image.png


我这样处理:

正常连接正常timeout参数, PHY状态里判断网线断, 然后重设timeout参数到极小值, 这样插拔网线就能马上触发 timeout。也就能马上重新连上tcp

这样处理有问题吗?


您好,在检测到PHY断开后可以通过WCHNET_SocketClose释放掉所创建的socket然后重新创建,如果做TCP服务器只需要关闭数据socket即可有新的连接请求协议栈会自动创建,监听端口可以不用重新创建一直保持监听即可,如果是网线断开且PHY状态没有改变的情况(比如客户端与连接的路由器或交换机之间连接异常)可以使用keepalive检测到通信超时后协议栈自动释放掉异常的数据socket,如有其他问题可与(zl@wch.cn)联系。


只有登录才能回复,可以选择微信账号登录