【问题标题】:How to P/Invoke getaddrinfo in Linux using Mono如何在 Linux 中使用 Mono P/Invoke getaddrinfo
【发布时间】:2017-07-04 16:28:30
【问题描述】:

我在尝试使用 libc 中的 getaddrinfo 时遇到了结构和链表问题,如下所示:

[DllImport("libc.so.6")]
private static extern int getaddrinfo(string node, string service,
                       addrinfo hints,
                       addrinfo res);

我怎样才能使缺少的addrinfo(和sockaddraddrinfo 中)。 addrinfo 是一个链表。我猜我必须[MarshalAs],但我不知道该怎么做。

如果您正在考虑建议Dns.GetHostEntry,请查看this post。这就是我计划从 libc 调用 getaddrinfo 的原因。

【问题讨论】:

    标签: c# linux mono


    【解决方案1】:

    回答我自己的问题。

    简短的回答是“不要这样做!” :-)

    原因是getaddrinfo 在堆上创建了一个链表(res 指针)并且需要释放。

    但是,可以使用一次性包装器(适配器模式)来完成,但它最有可能导致与问题中链接的帖子中所述的 Dns.GetHostEntry 相同的问题。

    【讨论】:

      猜你喜欢
      • 2010-11-12
      • 1970-01-01
      • 1970-01-01
      • 2012-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多