Unix сокеты с getaddrinfo () в C - PullRequest
       16

Unix сокеты с getaddrinfo () в C

1 голос
/ 01 августа 2011

Кто-нибудь знает, возможно ли использовать getaddrinfo с сокетами unix в C (AF_UNIX). Я попробовал пару вещей, но я не могу заставить это работать. Это в основном то, что я пытаюсь:

struct addrinfo hints, *res;

memset(&hints, 0, sizeof(hints));
hints.ai_family   = AF_UNIX;
hints.ai_socktype = SOCK_STREAM;
if(getaddrinfo("What should I put here?", "What should I put here?", &hints, &res) != 0){
    //do sth about
}

Мой вопрос заключается в том, как заполнить поля узла и службы, если это возможно использовать с сокетами Unix.
Заранее спасибо.

Ответы [ 3 ]

4 голосов
/ 15 мая 2012

В некоторых реализациях getaddrinfo() поддерживаются AF_UNIX адреса сокетов, но они больше этого не делают из-за проблем безопасности.

Вам действительно не нужна функция для «поиска» адреса AF_UNIX в любом случае - если вы знаете путь к сокету, то вы можете просто скопировать его прямо в sockaddr_un достаточного размера. Нет шага разрешения для AF_UNIX адресов - имя сокета равно адресу сокета.

0 голосов
/ 13 января 2014

Очень поздно, но только для записей, вы пробовали это - Подсказки struct addrinfo, * res;

memset(&hints, 0, sizeof(hints));
hints.ai_family   = AF_UNSPEC;   //is the address family(IPV4 or 6) or UNSPEC for either
hints.ai_socktype = SOCK_STREAM; 
if(getaddrinfo(parm1, parm2, &hints, &res) != 0){
    //do sth about
}

parm1 -> - имя хоста или адрес для подключения. При вызове с NULL здесь указывается адрес локального хоста, в этом случае вы указываете hints.ai_flags = AI_PASSIVE. parm2 -> это имя предполагаемой службы (http, ftp и т. д.) или соответствующий номер порта для этой службы, для которой сокет используется

0 голосов
/ 01 августа 2011

С man 3 getaddrinfo:

Параметр hints указывает предпочитаемый тип сокета или протокол. NULL-подсказка указывает, что любой сетевой адрес или протокол приемлем. Если этот параметр не равен NULL, он указывает на структуру addrinfo, члены ai_family, ai_socktype и ai_protocol определяют предпочтительный тип сокета. AF_UNSPEC в ai_family указывает любое семейство протоколов (например, IPv4 или IPv6). 0 в ai_socktype или ai_protocol указывает, что любой тип сокета или протокол также приемлем. Член ai_flags определяет дополнительные параметры, определенные ниже. Несколько флагов задаются логическим ИЛИ, объединяя их вместе. Все остальные члены в параметре hints должны содержать либо 0, либо нулевой указатель.

Похоже, вам нужно передать параметр hints, чтобы сообщить, что вам нужен сокет unix.

...