2010-08-23 16 views
2

Res_query (int res_query(const char *dname, int class, int type,unsigned char *answer, int anslen);) est-il sûr pour les threads?Res_query est-il sûr pour les threads?

Je pense que oui, car il écrit sa réponse dans un tampon alloué par l'utilisateur (contrairement à gethostbyname qui utilise un tampon alloué statiquement).

Est-ce que quelqu'un sait à coup sûr?

+0

[ne semble pas être sûr pour la sécurité MT] (http://www.google.com/search?hl=fr&safe=off&q=linux+res_query+multi+threaded&aq=f&aqi=&oq==oq=&gs_rfai=) – Dummy00001

+0

@ Dummy00001: Il n'y a qu'un seul hit, où quelqu'un prétend que res_query n'est pas threadsafe, car il écrase la variable de configuration interne _res. J'ai trouvé une discussion plus ancienne (à partir de 2002) sur la liste de diffusion BIND (libresolv et donc res_query fait partie de BIND), que _res devrait être thread-local, donc je pense qu'ils ont déjà implémenté il y a des années. – IanH

+0

btw, [libevent] (http://monkey.org/~provos/libevent/) annonce la prise en charge de la résolution de noms (async). Je parie qu'ils ont de meilleurs docs concernant MT-safeness. Bonne chance. – Dummy00001

Répondre

1

Vous aviez raison de dire que res_query n'est pas threadsafe. Vous devez utiliser res_nquery, qui prend d'abord un argument 'res_state'. De tout ce que j'ai lu, c'est ainsi que la requête devrait être faite d'une manière sûre.