如何使用 Mono P/Invoke 在 Linux 中获取地址信息

How to P/Invoke getaddrinfo in Linux using Mono

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

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

如何让缺失的addrinfo(和addrinfo里面的sockaddr)。 addrinfo 顺便说一下是一个链表。我猜我必须 [MarshalAs] 但我不知道该怎么做。

如果您正在考虑建议 Dns.GetHostEntry,请查看 。这就是我计划从 libc.

调用 getaddrinfo 的原因

回答我自己的问题。

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

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

然而,它可以通过一次性包装(适配器模式)来完成,但它最有可能导致与问题中链接的 post 中描述的 Dns.GetHostEntry 相同的问题。