res_query是线程安全的吗?

3

res_query (int res_query(const char *dname, int class, int type,unsigned char *answer, int anslen);) 是线程安全的吗?

我认为是的,因为它将答案写入用户分配的缓冲区(与使用静态分配缓冲区的gethostbyname相反)。

有人确定吗?


@Dummy00001:只有一个帖子提到res_query不是线程安全的,因为它会覆盖内部配置变量_res。我在BIND邮件列表(libresolv和res_query是BIND的一部分)中找到了一些早期讨论(来自2002年),_res应该是线程本地的,所以我认为他们已经在多年前实现了这个功能。 - IanH
顺便说一句,libevent 宣传支持(异步)名称解析。我敢打赌他们在多线程安全方面有更好的文档。祝好运。 - Dummy00001
@Dummy00001:不幸的是,我不能使用其他库,因为 res_query 是从第三方库中调用的。 - IanH
1个回答

2

您是正确的,res_query不是线程安全的。您需要使用res_nquery,该函数首先接受一个'res_state'参数。从我所读到的一切来看,这是在线程安全的情况下执行查询的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接