做了个板子,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后重启板子?
还有朋友说用心跳,不懂啊,心跳怎么搞?
离线
linux编程岂不是更难?光个移植系统估计就能难住我。
离线
@aozima
确实有用,加上这段代码后断开网线,大约60秒后,socket会recv()出错。
我这里的处理上关闭socket,让后跳出循环,重建socket再连接。
后来试了多次,发现,拔掉网线一会后,如果过了比较短的一段时间,再插上网线,这时,仍可以通讯,没有重连。
但是拔掉网线超过了大约30秒后,插上网线,貌似可以通讯一条,然后就通讯不上了,等到60秒以后,socket recv()出错,关闭socket,跳出内层循环,在外层循环里重建socket及重新connect(),但是总是连不上。
请问,这是为什么?
离线
重新connect 有换src port吗?
没明白src port指的是什么。
是指tcp server的地址和端口吗?这个是不变的。
socket是重新建的。
离线
@真的是很烦
那么,这个src port,该如何换呢?请教。
离线