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

專門開闢一個網絡初始化和檢測任務來處理插拔問題:

實際測試效果比較滿意,這樣就不用具體情況具體分析了,直接所有問題全部被處理了。

