не удалось подключиться к сокету домена Unix на OS X - PullRequest
1 голос
/ 10 марта 2011

Я пытаюсь подключиться к сокету домена 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 ENOENT.но, выполнив команду ls on / tmp, покажи, что файл там есть.

что я делаю не так?

Ответы [ 2 ]

1 голос
/ 13 марта 2011

Вы запутались в address_length. Это должно быть просто:

size_t address_length = sizeof(address);

или просто:

connect(socketFd, (struct sockaddr *)&address, sizeof(address));
0 голосов
/ 10 марта 2011

Поскольку вы работаете в Mac OS X, вы можете попробовать:

socketFD = socket(PF_LOCAL, SOCK_STREAM, 0);

PF_UNIX устарела на Snow Leopard.Не уверен насчет AF_UNIX в Mac OS (по крайней мере, страница руководства по сокетам не показывает его).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...