我正在尝试连接到另一个进程创建的unix域套接字。 这就是我在做的事情。当我运行它时,文件存在于文件系统中。
socketFd = socket(AF_UNIX, SOCK_STREAM, 0);
if (socketFd < 0) {
socketFd = -1;
return -1;
}
bzero(&address, sizeof(struct sockaddr_un));
address.sun_family = AF_UNIX;
size_t address_length = sizeof(address.sun_family) +
sprintf(address.sun_path, "/tmp/%s", COMMON_SOCKET);
connect(socketFd, (struct sockaddr *)&address, address_length);
我收到错误,错误是ENOENT。但在/ tmp上做ls会告诉我文件在那里。
我做错了什么?
答案 0 :(得分:1)
你对address_length
感到困惑。它应该只是:
size_t address_length = sizeof(address);
或者只是:
connect(socketFd, (struct sockaddr *)&address, sizeof(address));
答案 1 :(得分:0)
由于您在Mac OS X上,可以尝试:
socketFD = socket(PF_LOCAL, SOCK_STREAM, 0);
Snow Leopard上不推荐使用PF_UNIX。不确定Mac OS上的AF_UNIX(至少套接字手册页没有显示)。