最初我把这个问题的标题定为"在QNX中,_PULSE_CODE_DISCONNECT和_PULSE_CODE_COIDDEATH有什么区别? 但是,我认为我的问题比这更广泛一些。
我已经使用 QNX Neutrino OS 6.6.0 实施了 IPC 服务器。 从本质上讲,我有一个服务器,可以查询配置信息,例如设置和内容。 它还接受对设置的更改。 它允许客户端订阅它。 这意味着一旦订阅,如果设置发生更改,服务器将通知其他客户端。
目前为止,一切都好。 到目前为止,这些东西对我来说是有意义的。 我不清楚的是处理客户端断开连接或进程死亡的适当方法。
现在,我的服务器上收到_PULSE_CODE_DISCONNECT。 这到底是什么意思? 我没有收到_PULSE_CODE_COIDDEATH,这是我所期望的。
我认为我特别对QNX中的coid和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来自脉冲的位置来清理。