我想在Linux上建立几个进程之间的IPC连接。我以前从未使用过UNIX套接字,因此我不知道这是否是解决此问题的正确方法。
一个进程接收数据(未格式化、二进制数据),并将通过本地AF_UNIX套接字使用数据报协议(类似于带有AF_INET的UDP)分发到多个客户端。此进程发送到本地Unix socket的数据应由监听同一socket的多个客户端接收。接收者数量可能会变化。
为了实现这一点,使用以下代码创建套接字并向其发送数据(服务器进程):
struct sockaddr_un ipcFile;
memset(&ipcFile, 0, sizeof(ipcFile));
ipcFile.sun_family = AF_UNIX;
strcpy(ipcFile.sun_path, filename.c_str());
int socket = socket(AF_UNIX, SOCK_DGRAM, 0);
bind(socket, (struct sockaddr *) &ipcFile, sizeof(ipcFile));
...
// buf contains the data, buflen contains the number of bytes
int bytes = write(socket, buf, buflen);
...
close(socket);
unlink(ipcFile.sun_path);
这个写操作返回-1,并且errno报告ENOTCONN(“传输端点未连接”)。我猜这是因为当前没有接收进程正在监听此本地套接字,对吗?
然后我尝试创建一个连接到这个套接字的客户端。
struct sockaddr_un ipcFile;
memset(&ipcFile, 0, sizeof(ipcFile));
ipcFile.sun_family = AF_UNIX;
strcpy(ipcFile.sun_path, filename.c_str());
int socket = socket(AF_UNIX, SOCK_DGRAM, 0);
bind(socket, (struct sockaddr *) &ipcFile, sizeof(ipcFile));
...
char buf[1024];
int bytes = read(socket, buf, sizeof(buf));
...
close(socket);
在这里,绑定失败了(“地址已在使用中”)。那么,我需要设置一些套接字选项,还是通常情况下这种方法是错误的?
提前感谢任何评论/解决方案!