小编Big*_*ick的帖子

Unix域套接字:使用一个服务器进程和多个客户端进程之间的数据报通信

我想在Linux上的几个进程之间建立IPC连接.我之前从未使用过UNIX套接字,因此我不知道这是否是解决此问题的正确方法.

一个进程接收数据(未格式化,二进制),并使用数据报协议通过本地AF_UNIX套接字分发此数据(即类似于带AF_INET的UDP).从该进程发送到本地Unix套接字的数据应由在同一套接字上侦听的多个客户端接收.接收器的数量可能会有所不同

为实现此目的,以下代码用于创建套接字并向其发送数据(服务器进程):

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);
Run Code Online (Sandbox Code Playgroud)

此写操作返回-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, …
Run Code Online (Sandbox Code Playgroud)

c sockets datagram

34
推荐指数
4
解决办法
5万
查看次数

标签 统计

c ×1

datagram ×1

sockets ×1