WCH沁恒单片机
直播中

哥儿

8年用户 901经验值
擅长:嵌入式技术
私信 关注
[问答]

ch563Q直接拔下网线tcp状态连接状态不变是为什么?

现在ch563Q做服务端,在已连接客户端时直接拔下网线 tcp状态连接状态不变
设计的是有个指示灯根据此函数返回状态点亮或熄灭来表示是否有客户端连接,正常连接会点亮,上位机软件关闭会熄灭,但直接拔下网线后此指示灯显示TCP客户端还一直存在,如何做到拔下网线自动断开TCP客户端的连接,并可以关闭这个指示灯,CH9121有引脚是可以的。但563这个不知道怎么搞。
unsigned char socket_open(void)
{
unsigned char i;
for (i = 1; i < CH563NET_MAX_SOCKET_NUM; i++)
{
if ((Socketinf.ScokStatus & 0xff) == SOCK_STAT_OPEN)
return 1;
}
return 0;
}


  

回帖(4)

王敏

2022-6-13 11:43:51
您好,这个功能可以通过,PHY改变中断来实现,产生PHY改变中断时,判断是连接还是断开,来控制一颗LED灯的亮灭。在下面函数里面增加。
  if(initstat & GINT_STAT_PHY_CHANGE)                                          /* PHY改变中断 */
   {
       i = CH563NET_GetPHYStatus();                                             /* 获取PHY状态 */
   }
举报

傅姁妮

2022-6-13 11:43:56
这也解决不了呀,拔掉等会再插上tcp状态依旧,但实际已经断了,做TCP服务端多长时间超时,会自动断开吗?
举报

王露

2022-6-13 11:44:01
再有若不释放资源,链接几个后满了,释放不了,那再也连不上了
举报

张桂珍

2022-6-13 11:44:05
实际上CH9121和CH563是完全不同的芯片,CH563作为一个单片机,是没有类似CH9121的TCPCS引脚来指示TCP连接装态的。你拔掉网线的操作就是物理层断开,在物理层断开之后,你有必要将所有的socket全部关闭,即在2楼提到的PHY转态改变中断里,如果确定是物理层断开了,那么你需要检测目前有多少个socket,然后依次全部关闭。在CH563再次报PHY状态改变中断后,确定是物理层连接上了,LINK速率协商成功,那么你再根据自己的业务逻辑,按照需求,一个一个重新打开socket。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分