【问题标题】:Unix sockets with getaddrinfo() in CC 中带有 getaddrinfo() 的 Unix 套接字
【发布时间】:2011-08-01 01:30:17
【问题描述】:

有谁知道是否可以在 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 套接字一起使用。
提前致谢。

【问题讨论】:

  • 你想做什么?你怎么称呼'getaddrinfo'?

标签: c sockets getaddrinfo


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      来自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 成员指定附加选项,定义如下。通过对它们进行逻辑或运算来指定多个标志。提示参数中的所有其他成员必须包含 0 或空指针。

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

      【讨论】:

      • 是的,但我的问题是我不知道我必须在哪里设置指向套接字的文件。我尝试在 getaddrinfo 的第一个和第二个参数中执行此操作,但它不起作用。
      • @esteban getaddrinfo 对 Unix 套接字无效,这不是一个很好的提示吗?您既没有有效的 nodeservice 来提供 API。
      • @Steve-o 正如你所说,这些只是提示。我正在寻找一个明确的答案,否则我根本不会提出这个问题。还是谢谢你。
      • @esteban 查看man getnameinfo,它更可能是 Unix 套接字友好的,Linux 页面仅列出了 sockaddr_insockaddr_in6 支持。
      猜你喜欢
      • 1970-01-01
      • 2015-02-06
      • 2015-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-17
      • 1970-01-01
      • 2011-12-06
      相关资源
      最近更新 更多