如何使用Mono在Linux中P / Invoke getaddrinfo

时间:2017-07-04 16:28:30

标签: c# linux mono

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

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

如何在addrinfo内部丢失sockaddr(和addrinfo)。顺便提一下,addrinfo是一个链表。我猜我必须[MarshalAs],但我不知道该怎么做。

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

1 个答案:

答案 0 :(得分:0)

回答我自己的问题。

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

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

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