2017-07-04 2 views
0

Je vais avoir des problèmes avec les struct et liste chaînée en essayant d'utiliser getaddrinfo de libc comme ceci:Comment P/Invoke getaddrinfo sous Linux en utilisant Mono

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

Comment puis-je faire le addrinfo manquant (et sockaddr à l'intérieur addrinfo). addrinfo est une liste liée d'ailleurs. Je devine que je dois [MarshalAs] mais je n'ai aucune idée de comment faire cela.

Si vous songez à suggérer Dns.GetHostEntry, jetez un oeil à this post. C'est la raison pour laquelle je prévois d'appeler getaddrinfo de libc.

Répondre

0

Répondre à ma propre question.

La réponse courte est: « Ne le faites pas! » :-)

La raison est que getaddrinfo crée une liste chaînée sur le tas (le pointeur res) et qui doit être libéré. Cependant, cela peut être fait avec un wrapper jetable (modèle d'adaptateur), mais il est plus susceptible de provoquer les mêmes problèmes que Dns.GetHostEntry comme décrit dans le post lié dans la question.