gpt4 book ai didi

c++ - AF_UNIX 与 SOCK_DGRAM 一起使用会导致 unix 套接字名称长度出现问题

转载 作者:太空宇宙 更新时间:2023-11-04 09:56:02 24 4
gpt4 key购买 nike

我的问题是关于使用 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 个字符,客户端 send(...) 将失败并出现错误(“没有这样的文件或目录”)。

一些注意事项:

有什么想法吗?

最佳答案

我怀疑问题与 sizeof(struct sockaddr) 有关。在我的系统上,地址字段允许 14 个字符。尝试 sizeof(struct sockaddr_un)

关于c++ - AF_UNIX 与 SOCK_DGRAM 一起使用会导致 unix 套接字名称长度出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4437955/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com