在项目中遇到一个问题,嵌入式Linux设备工作一段时间后网络会出现故障,网线虽然连着,但却不能与外部主机通信。此时用串口调试内核,用ifconfig eth0 up命令可以再度启动网络。所以现在的需要在网络故障时检测出来,然后复位网络。
如何检测网络故障是一个问题,在网上搜索了半天也没有找到好的解决方法。突然想到可以自己实现linux中的ping命令,然后定时ping网关,依据是否能ping通网关就可以判断出网络是否故障。
然后把这个程序嵌入我的程序中,实现了功能。下面是ping函数部分的代码:
以上是ping函数的实现。然后我开了个定时器每隔10S启动一次,一旦检测到网络故障则自动恢复: