1

有谁知道是否可以在 C (AF_UNIX) 中将 getaddrinfo 与 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 套接字一起使用。
提前致谢。

4

3 回答 3

4

的一些实现getaddrinfo()支持AF_UNIX套接字地址,但出于安全考虑,它们不再这样做。

无论如何,您实际上并不需要一个函数来“查找”AF_UNIX地址 - 如果您知道套接字路径,那么您可以直接将其复制到sockaddr_un足够大小的地址中。没有AF_UNIX地址解析步骤 - 套接字名称套接字地址。

于 2012-05-15T13:51:37.680 回答
0

很晚了,但只是为了记录,你试过这个吗 - struct addrinfo hints, *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 等)或套接字用于该服务的相应端口号

于 2014-01-13T10:48:16.777 回答
-1

来自man 3 getaddrinfo

提示参数指定首选套接字类型或协议。NULL 提示指定任何网络地址或协议都是可接受的。如果此参数不为 NULL,则它指向 addrinfo 结构,其 ai_family、ai_socktype 和 ai_protocol 成员指定首选套接字类型。ai_family 中的 AF_UNSPEC 指定任何协议族(例如 IPv4 或 IPv6)。ai_socktype 或 ai_protocol 中的 0 指定任何套接字类型或协议也是可接受的。ai_flags 成员指定附加选项,定义如下。通过对它们进行逻辑或运算来指定多个标志。提示参数中的所有其他成员必须包含 0 或空指针。

所以看起来你需要传入hints参数来告诉它你想要一个unix套接字。

于 2011-08-01T01:37:49.707 回答