【问题标题】:In QNX, how to manage IPC connections between server and client?在 QNX 中,如何管理服务器和客户端之间的 IPC 连接?
【发布时间】:2019-03-07 18:37:18
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: c++ c ipc qnx qnx-neutrino


    【解决方案1】:

    接收_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 来自脉冲。

    【讨论】:

    • 我遇到的一个问题是,当我认为我应该接收脉冲时,我并不总是接收到脉冲。我应该更新问题吗?
    • 您是否只是偶尔收到_PULSE_CODE_COIDDEATH?您能否发布有关频道创建的服务器代码以及您在哪里使用 MsgReceive 来服务客户端。
    猜你喜欢
    • 1970-01-01
    • 2016-02-16
    • 2010-12-25
    • 2017-05-25
    • 2012-04-24
    • 2011-01-20
    • 2011-05-20
    • 2016-04-10
    • 2015-11-09
    相关资源
    最近更新 更多