在尝试使用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
的原因。
答案 0 :(得分:0)
回答我自己的问题。
简短的回答是“不要这样做!”: - )
原因是getaddrinfo
在堆上创建了一个链表(res
指针)并且需要释放它。
然而,可以使用一次性包装(适配器模式)来完成它,但它最有可能导致与问题中链接的帖子中描述的Dns.GetHostEntry
相同的问题。