无法连接到os x上的unix域套接字

时间:2011-03-10 19:52:20

标签: c macos sockets

我正在尝试连接到另一个进程创建的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会告诉我文件在那里。

我做错了什么?

2 个答案:

答案 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(至少套接字手册页没有显示)。