2010-08-23 3 views
2

res_query (int res_query(const char *dname, int class, int type,unsigned char *answer, int anslen);)는 스레드로부터 안전한가요?res_query는 스레드로부터 안전한가요?

정적으로 할당 된 버퍼를 사용하는 gethostbyname과는 달리 사용자 할당 버퍼에 응답을 기록하기 때문에 그렇게 생각합니다.

누군가가 확실히 알고 있습니까?

+0

[MT 안전하지 않은 것 같습니다] (http://www.google.com/search?hl=ko&safe=off&q=linux+res_query+multi+threaded&aq=f&aqi=&aql=&oq=&gs_rfai=) – Dummy00001

+0

@ Dummy00001 : 내부 구성 변수 _res를 덮어 쓰므로 누군가 res_query가 threadsafe가 아니라고 주장하는 단 하나의 히트가 있습니다. BIND 메일 링리스트 (libresolv와 res_query는 BIND의 일부 임)에서 좀 더 오래된 논의 (2002 년부터)를 발견했습니다. _res는 스레드 로컬이어야하며, 그래서 나는 이미 몇 년 전에 구현했다고 생각합니다. – IanH

+0

btw, [libevent] (http://monkey.org/~provos/libevent/)는 (비동기) 이름 해석에 대한 지원을 알립니다. MT 안전성에 관한 더 나은 문서가있을 것입니다. 행운을 빕니다. – Dummy00001

답변

1

res_query가 threadsafe가 아니라는 것이 옳았습니다. 먼저 'res_state'인수를 취하는 res_nquery를 사용해야합니다. 내가 읽은 모든 것에서 그것은 쿼리가 스레드 안전 방식으로 수행되어야하는 방법입니다.

관련 문제