您尚未登录。

楼主 # 2021-09-15 08:59:38

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,205
积分: 1141.5

tcp socket编程能否判断网线是否断了?

做了个板子,stm32f429+rtthread,板子做tcp client,通过网线连接pc。

实验过程中发现,如果通讯过程中拔掉网线,板子并不知道socket断开了。再插上网线,则通讯不成功了。
我想让板子能检测出网线是否故障,故障的话,重新建立socket连接。

群里朋友说select方法里有个参数是检测故障的,我搜了下:
int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,struct timeval *timeout);
errorfds估计是,但是不知道改怎么用?

还有朋友说用link down,拔开网线后,调试串口 确实打印出了Link down。也许能用这个,linkdown后重启板子?

还有朋友说用心跳,不懂啊,心跳怎么搞?

离线

楼主 #3 2021-09-15 14:19:53

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,205
积分: 1141.5

Re: tcp socket编程能否判断网线是否断了?

linux编程岂不是更难?光个移植系统估计就能难住我。

离线

楼主 #6 2021-09-16 16:36:35

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,205
积分: 1141.5

Re: tcp socket编程能否判断网线是否断了?

@aozima

确实有用,加上这段代码后断开网线,大约60秒后,socket会recv()出错。
我这里的处理上关闭socket,让后跳出循环,重建socket再连接。

后来试了多次,发现,拔掉网线一会后,如果过了比较短的一段时间,再插上网线,这时,仍可以通讯,没有重连。
但是拔掉网线超过了大约30秒后,插上网线,貌似可以通讯一条,然后就通讯不上了,等到60秒以后,socket recv()出错,关闭socket,跳出内层循环,在外层循环里重建socket及重新connect(),但是总是连不上。
请问,这是为什么?

离线

楼主 #8 2021-09-17 08:51:27

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,205
积分: 1141.5

Re: tcp socket编程能否判断网线是否断了?

真的是很烦 说:

重新connect 有换src port吗?

没明白src port指的是什么。
是指tcp server的地址和端口吗?这个是不变的。

socket是重新建的。

离线

楼主 #10 2021-09-17 14:19:36

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,205
积分: 1141.5

Re: tcp socket编程能否判断网线是否断了?

@真的是很烦
那么,这个src port,该如何换呢?请教。

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn