2011-03-10 100 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