[英]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.