說明:
網線熱插拔是實際項目中經常會遇到的問題,熱插拔又有各種各樣的情況要具體處理,這里分享一種實用性方案。
熱插拔的問題種類:
1、上電前,網線還沒有插入,上電后插入如何處理。
2、服務器模式使用時,檢測到斷開網線了,重新插入如何處理。
3、客戶端模式時,檢測到網線斷開了,重新插入如何處理。
4、長時間斷開,比如1個小時以上,重新插入后協議棧無法正常運行如何處理。
5、將網線從一個網絡環境切換到另一個網絡環境。
這幾個問題,如果具體問題都配一個具體的解決方案就太繁瑣了。而且邏輯關系不容易捋順。
解決辦法:
這里為大家分享一種解決辦法,以新版的RL-TCPnet V7.X為例。
1、有個專門的網絡插拔通知函數 ,通過這個函數可以方便的了解網絡插拔信息。
2、然后還有個初始化函數netInitialize()和復位初始化函數netUninitialize(),其中這個復位初始化函數尤其好用,在檢測到網線被拔掉后,調用此函數會釋放所有用戶使用的網絡資源,並刪除以太網接口任務和協議棧內核任務。
3、最后就是用戶自己創建的各種應用任務,我們這里在檢測到網線拔掉后直接將其刪除即可(優先調用網絡復位任何后再刪),檢測到網線插入后重新創建。
具體處理:
網絡插拔消息函數,這里直接設置一個全局變量來標識插拔狀態。
當然,追求執行效率,也可以采用任務信號量,事件標志等方式,這里沒有采用的原因是大家自己移植的時候很容易出現沒有創建任務組件就去使用了。
專門開辟一個網絡初始化和檢測任務來處理插拔問題:
實際測試效果比較滿意,這樣就不用具體情況具體分析了,直接所有問題全部被處理了。