【发布时间】:2015-10-15 13:56:00
【问题描述】:
我有这样的情况,在后台运行的服务通过放置在文件系统上的套接字 (SOCK_DGRAM) 使其自身可用于基于 ASCII 的命令。我能够成功向该接口发送命令,但无法接收后台服务生成的任何响应。
据我了解,我没有收到服务响应的原因是因为底层 IPC 在技术上不在两个进程之间,而是在两个地址之间。因此,有必要将我的端点绑定到一个特定的地址位置,以便服务知道要发送它的响应。但是,问题是我不想用太多额外的套接字文件污染目录空间。
也就是说,我可以通过简单地执行以下操作来完成这项工作:
struct sockaddr_un local;
int len;
s = socket(AF_UNIX, SOCK_DGRAM, 0);
local.sun_family = AF_UNIX;
strcpy(local.sun_path, "/path/to/some/dir/mySocketFile");
len = strlen(local.sun_path) + sizeof(local.sun_family);
bind(s, (struct sockaddr *)&local, len);
//Send commands to control interface of background service
一切都很好,因为通过 绑定到 mySocketFile 服务有一个地址,它将响应。
简而言之,有没有办法通过其可用的套接字接口与服务进行通信并且接收响应而不绑定本地端点,以便它创建另一个套接字-在文件系统上键入文件?即某种 nameless 套接字?
当然,如果有人在我的逻辑中发现任何误解或误解,请指出。
【问题讨论】:
-
@Dinesh,是的,该链接的最佳答案基本上表达了我认为的原因。本质上,客户端和服务器都需要端点来进行正确的通信——因此每个都必须绑定到特定的套接字接口。我在问这个问题,看看是否有一种可能的方法,客户端不生成此端点,而是使用某种在文件系统上不可见的无名套接字。