0

最初我将问题命名为“在 QNX 中,_PULSE_CODE_DISCONNECT 和 _PULSE_CODE_COIDDEATH 有什么区别?”。但是,我认为我的问题比这更广泛。

我已经使用 QNX Neutrino OS 6.6.0 实现了 IPC 服务器。本质上,我有一个服务器,用于查询配置信息,如设置和东西。它还接受对设置的更改。它允许客户订阅它。这意味着一旦订阅,如果设置发生更改,服务器将通知其他客户端。

到目前为止,一切都很好。到目前为止,这些东西对我来说很有意义。我不清楚的是处理客户端断开连接或进程死亡的适当方法。

现在,我在我的服务器上收到一个 _PULSE_CODE_DISCONNECT。这到底是什么意思呢?我没有收到 _PULSE_CODE_COIDDEATH,这是我所期待的。

我认为特别是我对 QNX 中的 coid 与 scoid 是什么感到有些困惑。

4

1 回答 1

1

接收_PULSE_CODE_COIDDEATH取决于您在创建通道时设置的标志。要获得该脉冲,您需要设置通道标志_NTO_CHF_COID_DISCONNECT

_PULSE_CODE_DISCONNECT通道标志有关_NTO_CHF_DISCONNECT,用于在所有连接断开时接收脉冲。

请参阅文档ChannelCreatehttp ://www.qnx.com/developers/docs/6.6.0_anm11_wf10/index.html#com.qnx.doc.neutrino.lib_ref/topic/c/channelcreate.html

coid 是当您通过 连接到频道时提供给您的连接 ID ConnectAttach。scoid 是一个服务器连接 id(内部分配),你在谈论的时候会得到它。在消息接收和回复上下文中,内核将回复路由到客户端。

另外,我的理解是,如果你得到了_PULSE_CODE_COIDDEATH你需要通过调用ConnectDetach(scoid)scoid 来自脉冲的位置来进行清理。

于 2018-10-26T05:03:39.270 回答