带守护进程的 Linux IPC 多客户端

标签 linux ipc unix-socket

这真的很基础,但我现在一头雾水。

我有一个守护进程,希望多个客户端能够与其对话。我希望客户端能够启动然后使用共享库,本质上是向守护进程“注册”。守护进程将为这个新客户端生成一个线程,并在客户端和新线程之间提供一个通信管道。

我正在考虑将 unix 数据报套接字作为所有客户端最初使用的“注册 channel ”,然后切换到特定于客户端的 channel ,但随后无法弄清楚如何在不设置它们的情况下为新数据报套接字创建唯一名称先验的。

  • 服务器和客户端在同一台机器上,更喜欢使用数据报套接字,而不必处理将流分解成数据包的问题。
  • 将以(非常)高的速率来回发送小消息。

最佳答案

如果您愿意,您可以完全避免命名客户端套接字的问题。每个客户端都可以使用 socketpair() 创建一对连接的套接字。客户端然后发送其中一个 通过众所周知的“注册 channel ”向服务器发送套接字描述符。然后服务器和客户端有一对私有(private)的、连接的、未命名的套接字用于它们的通信。

套接字描述符使用 sendmsg() 发送到服务器并填充 msg 的控制消息。

这两个答案有一些相关信息/链接:

How would I use a socket to have several processes communicate with a central process?

Sending file descriptor over UNIX domain socket, and select()

关于带守护进程的 Linux IPC 多客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13712337/

相关文章:

c++ - 我的 C/C++ 应用程序如何确定 root 用户是否正在执行命令?

linux - 如何让 Jenkins 脚本中的 $PATH 与运行 Jenkins 的用户下的 $PATH 相匹配?

erlang - 将事件从 erlang 传递到 Clojure

java - 在带有选择器的非阻塞模式下将 Java NIO 与 Unix 域套接字一起使用

c - 错误: struct sockaddr_un' has no member named 'sun_port'

c - 关闭后如何重新绑定(bind)本地套接字?

正则表达式替换可选的下划线

python - 如何使用 Zeromq 的 inproc 和 ipc 传输?

C管道多条消息只收到一条

r - 在 Bash 中打印 R 脚本的输出