qnx中socket監聽失敗問題

        最近項目在QNX系統中用到了QLocalsocket,但是奇怪的是監聽socket總是失敗(檢查程序無任何問題,在linux下能正常使用)。後經大佬指點,並查閱資料才解決這一問題,其主要原因還是自己對QNX瞭解太少。

QNX簡介:

   QNX是一個分佈式、可擴展、遵從POSIX規範的類Unix硬實時操作系統。且QNX爲微內核的架構,微內核只提供進程調度、進程間通信、底層網絡通信和中斷處理四種服務。驅動程序、協議棧、文件系統、應用程序等都在微內核之外內存受保護的安全的用戶空間內運行,組件之間能避免相互影響,在遇到故障時也能重啓。QNX Neutrino通過微內核架構和進程間通信,達到了獨一無二的有效性、模塊化和簡潔性。詳細介紹可參考:https://www.jianshu.com/p/1e9aa0fc79fc

QNX架構如下所示:

從圖中可以很清晰的看出來,TCP/IP manager 和 Qnet network manager是用來管理網絡相關的兩個模塊,也就是說我寫的程序之所以會監聽失敗,其原因很有可能就是網絡管理相關的模塊沒有給應用程序"授權"導致的。

QNX網絡架構:

既然懷疑到網絡管理模塊上來了,就有必要了解一下QNX的網絡架構了。首先看圖:

        我們的本機網絡子系統由網絡管理器可執行文件(io-pkt-v4、io-pkt-v4-hc或io-pkt-v6-hc)以及一個或多個共享庫模塊組成。io-pkt組件作爲一種包重定向器/多路複用器,負責根據其命令行上給出的配置加載協議和驅動程序模塊。

        說白了就是靠這個命令來給我們的程序"授權",使它能夠使用socket通信。

深入瞭解QNX 網絡架構請參考:https://blog.csdn.net/wwq_wu_hxd/article/details/105089920

解決方法:

program_path = /usrdata/local_socket_test
io-pkt-v6-hc -i1 -ptcpip prefix=/alt
SOCK=/alt $program_path &

按如上方法運行程序,即可解決socket監聽失敗的問題了。 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章