2011-03-10 120 views
1

我试图连接到另一个进程创建的unix域套接字。 这是我正在做的。当我运行它时,该文件在文件系统上存在。无法连接到os上的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显示文件在那里。

我做错了什么?

回答

1

您对address_length感到困惑。它应该仅仅是:

size_t address_length = sizeof(address); 

或者真的只是:

connect(socketFd, (struct sockaddr *)&address, sizeof(address)); 
+0

工作:-) – amitp 2011-03-14 06:07:51

0

由于您的Mac OS X上,你可以尝试:

socketFD = socket(PF_LOCAL, SOCK_STREAM, 0);

PF_UNIX是雪豹弃用。不确定Mac OS上的AF_UNIX(至少套接字手册页不显示它)。

+1

有结构sockaddr_un。它是在sys/un.h上定义的 – amitp 2011-03-12 06:43:38

+0

你是对的,我删除了那个语句。 – 2011-03-13 00:52:34