gpt4 book ai didi

c++ - 消息队列中的accept() IPC UNIX

转载 作者:行者123 更新时间:2023-11-30 17:51:44 25 4
gpt4 key购买 nike

for (;;)
{
if (msgrcv(msqid, &flag, sizeof(struct flags) - sizeof(long), 1, IPC_NOWAIT)>0)
break;
}
msgsnd(msqid, &message , sizeof(struct messages) - sizeof(long), 0);

是否有像sockets IPC中那样的accept()函数,但适用于消息队列 IPC?我的服务器应该等待客户端连接,并且只有当客户端连接时才将数据发送回它。我特别从客户端发送一些无用的数据并在无限循环中检查数据(这意味着客户端已连接,我知道这是非常愚蠢的算法)。

最佳答案

不,没有任何直接类似的东西。消息队列更像是无连接的数据报套接字,而不是面向连接的流套接字(支持 accept() 等)。

一些实现(z/OS?)公开了 msgrcv 上阻塞的进程数量,这与您正在寻找的类似,但这不可移植。

据我所知,您有两个简单的选择。

首先,执行您正在执行的操作,但不要在服务器的 msgrcv 中执行 IPC_NOWAIT。如果你什么都不做,那么循环旋转是没有意义的。只是阻塞,直到客户端宣布自己。 (并使用不同的消息类型进行客户端到服务器和服务器到客户端的通信 - 您不希望客户端将其消息发送到服务器,反之亦然。)

其次,切换到 AF_UNIX 流套接字,这将为您提供 accept() 可用的语义。

关于c++ - 消息队列中的accept() IPC UNIX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16545967/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com