我最初将问题标题为“在QNX中,_PULSE_CODE_DISCONNECT和_PULSE_CODE_COIDDEATH有什么区别?”。但是,我认为我的问题比这更广泛。
我已经使用QNX Neutrino OS 6.6.0实现了IPC服务器。从本质上讲,我有一台查询配置信息的服务器,例如设置和设置。它还接受对设置的更改。它允许客户订阅它。这意味着,一旦订阅,如果设置发生更改,服务器将通知其他客户端。
到目前为止,一切都很好。到目前为止,这些东西对我来说很有意义。对我来说不清楚的是处理客户端断开连接或进程终止的适当方法。
现在,我在服务器上收到_PULSE_CODE_DISCONNECT。这到底是什么意思呢?我没有收到_PULSE_CODE_COIDDEATH,这正是我所期望的。
我想我尤其对QNX中的coid vs scoid感到有些困惑。
最佳答案
接收_PULSE_CODE_COIDDEATH
取决于您在创建通道时设置的标志。要获得该脉冲,您需要设置通道标志_NTO_CHF_COID_DISCONNECT
。_PULSE_CODE_DISCONNECT
与通道标志_NTO_CHF_DISCONNECT
有关,当所有连接断开时接收脉冲。
请参阅ChannelCreate
的文档:
http://www.qnx.com/developers/docs/6.6.0_anm11_wf10/index.html#com.qnx.doc.neutrino.lib_ref/topic/c/channelcreate.html
coid是您通过ConnectAttach
连接到频道时给您的连接ID。
scoid是一个服务器连接ID(在内部分配),您可以在所讨论的脉冲中获得它。在消息接收和回复上下文中,内核将回复路由到客户端。
另外,我的理解是,如果得到了_PULSE_CODE_COIDDEATH
,则需要通过调用ConnectDetach(scoid)
进行清理,其中scoid来自脉冲。