簡體   English   中英

無法連接到OS X上的Unix域套接字

[英]failed to connect to unix domain socket on os x

我正在嘗試連接到另一個進程創建的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);

我收到錯誤消息,錯誤消息是errno。 但是在/ tmp上執行ls告訴我文件在那里。

我做錯了什么?

您對address_length感到困惑。 它應該只是:

size_t address_length = sizeof(address);

或實際上只是:

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

由於您使用的是Mac OS X,因此您可以嘗試:

socketFD = socket(PF_LOCAL, SOCK_STREAM, 0);

PF_UNIX在Snow Leopard上已棄用。 不確定Mac OS上的AF_UNIX(至少套接字手冊頁未顯示)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM