我的问题是关于使用AF_UNIX和SOCK_DGRAM的IPC。 从代码中删除一些错误检查后,我的服务器代码是:
sd = socket(AF_UNIX, SOCK_DGRAM, 0);
memset(&serveraddr, 0, sizeof(serveraddr));
serveraddr.sun_family = AF_UNIX;
strcpy(serveraddr.sun_path, SERVER_PATH);
length = BUFFER_LENGTH;
rc = setsockopt(sd, SOL_SOCKET, SO_RCVLOWAT, (char *)&length, sizeof(length));
rc = bind(sd, (struct sockaddr *)&serveraddr, SUN_LEN(&serveraddr));
rc = recv(sd, buffer, sizeof(buffer), 0));
从代码中删除一些错误检查后,我的客户端代码是:
sd = socket(AF_UNIX, SOCK_DGRAM, 0);
memset(&serveraddr, 0, sizeof(serveraddr));
serveraddr.sun_family = AF_UNIX;
strcpy(serveraddr.sun_path, SERVER_PATH);
memset(buffer, 'a', sizeof(buffer));
socklen_t server_length = sizeof(struct sockaddr);
sendto(sd, buffer, sizeof(buffer), 0, (struct sockaddr *)&serveraddr, server_length);
我可以看到的问题在于SERVER_PATH的定义。 一旦我的SERVER_PATH的长度超过14个字符,客户端发送(...)将失败并显示错误(“没有这样的文件或目录”)。
有些注意事项:
任何想法?
答案 0 :(得分:2)
我怀疑问题与sizeof(struct sockaddr)
有关。在我的系统上,允许14个字符的地址字段。试试sizeof(struct sockaddr_un)
。