qnx中socket监听失败问题

        最近项目在QNX系统中用到了QLocalsocket,但是奇怪的是监听socket总是失败(检查程序无任何问题,在linux下能正常使用)。后经大佬指点,并查阅资料才解决这一问题,其主要原因还是自己对QNX了解太少。

QNX简介:

   QNX是一个分布式、可扩展、遵从POSIX规范的类Unix硬实时操作系统。且QNX为微内核的架构,微内核只提供进程调度、进程间通信、底层网络通信和中断处理四种服务。驱动程序、协议栈、文件系统、应用程序等都在微内核之外内存受保护的安全的用户空间内运行,组件之间能避免相互影响,在遇到故障时也能重启。QNX Neutrino通过微内核架构和进程间通信,达到了独一无二的有效性、模块化和简洁性。详细介绍可参考:https://www.jianshu.com/p/1e9aa0fc79fc

QNX架构如下所示:

qnx中socket监听失败问题_第1张图片

从图中可以很清晰的看出来,TCP/IP manager 和 Qnet network manager是用来管理网络相关的两个模块,也就是说我写的程序之所以会监听失败,其原因很有可能就是网络管理相关的模块没有给应用程序"授权"导致的。

QNX网络架构:

既然怀疑到网络管理模块上来了,就有必要了解一下QNX的网络架构了。首先看图:

qnx中socket监听失败问题_第2张图片

        我们的本机网络子系统由网络管理器可执行文件(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监听失败的问题了。 

 

你可能感兴趣的:(qnx,计算机基础知识)