繁体   English   中英

在C中使用getaddrinfo()的Unix套接字

[英]Unix sockets with getaddrinfo() in C

有谁知道是否可以在C(AF_UNIX)中的unix套接字上使用getaddrinfo。 我已经尝试了一些方法,但是无法使其正常工作。 这基本上是我正在尝试的:

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套接字中使用它,如何填充节点和服务字段。
提前致谢。

getaddrinfo()某些实现支持AF_UNIX套接字地址,但是出于安全考虑,它们不再支持。

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

很晚了,但是只是为了记录,您是否尝试过-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等)或套接字用于该服务的相应端口号

man 3 getaddrinfo

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

因此,看起来您需要传递hints参数来告诉您您想要一个Unix套接字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM