2013-05-14 81 views
0
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()功能,但对于message queues IPC? 我的服务器应该等待客户端连接,并且只有当客户端连接时才将数据发回给它。 我特别从客户端发送一些无用的数据和检查无限循环中的数据(这意味着客户端连接,我知道这是非常愚蠢的算法)。在消息接受()队列IPC UNIX

+0

http://beej.us/guide/bgnet/output/html/multipage/index.html - 阅读本网络教程以了解网络基础知识。 – VoidPointer 2013-05-14 15:31:27

回答

0

不,没有什么直接的相似之处。消息队列更像无连接的数据报套接字,比它们像面向连接的流套接字(它支持accept()等等)。

某些实现(z/OS?)显示在msgrcv上阻塞的进程数量与您正在查找的类似,但这不是可移植的。

正如我所见,您有两个简单的选择。

首先,请在服务器的msgrcv中做你正在做的事情,但不要IPC_NOWAIT。如果你没有做任何事情,那么在循环中没有任何意义。阻止直到客户宣布自己。 (并且使用不同的消息类型进行客户端到服务器和服务器到客户端的通信 - 您不希望客户端将消息发送到服务器,反之亦然)。

其次,交换机到AF_UNIX流套接字,它会给你accept()能够语义。