Nếu tôi nhận được một "Tên hoặc dịch vụ chưa biết" ban đầu (EAI_NONAME), lệnh gọi getaddrinfo() tiếp theo sẽ chuyển thẳng đến dns thay vì kiểm tra bộ nhớ cache đầu tiên (nhật ký nscd hiển thị không có lần tra cứu nào, tcpdump hiển thị lưu lượng truy cập đến máy chủ DNS). Nếu cuộc gọi đầu tiên thành công trong việc nhận địa chỉ, từ đó trở đi, tất cả các cuộc gọi getaddrinfo() sẽ chuyển tới nscd trước, như mong đợi.bằng cách sử dụng getaddrinfo() chỉ kiểm tra bộ nhớ cache nscd lần đầu tiên nếu DNS lần
Tôi đang biên dịch chống lại glibc-2.13 cho Linux cánh tay. Trong rc.d của tôi, nscd được bắt đầu trước daemon của tôi. nscd được đặt để không cho phép cache được chia sẻ và duy trì bộ nhớ cache lưu trữ. Tôi đang sử dụng nscd từ busybox (0,47). nsswitch.conf được thiết lập để máy chủ kiểm tra cache/files/dns. hosts.conf được thiết lập để kiểm tra các tập tin/ràng buộc.
Trình nền của tôi đang gọi getaddrinfo().
Tôi có nhật ký gỡ lỗi để chạy nscd và chúng cho thấy rằng máy khách bắt đầu đọc phản hồi DNS đóng với lỗi "Lỗi ống".
Sau đó, nó sẽ hiển thị các nỗ lực GAI từ các trình tiện ích khác đang cố gắng sử dụng bộ nhớ cache (vì vậy tôi biết nó không bị khóa hoặc bất kỳ điều gì), nhưng daemon đã nhận EAI_NONAME không bao giờ liên lạc lại với nscd để thực hiện tra cứu bộ nhớ cache.
Nếu tôi khởi động lại daemon, tôi nhận được cùng một hành vi, nếu lần truy vấn DNS đầu tiên hết lần nữa.
Có điều gì đó trong glibc làm mất hiệu lực liên kết daemon của tôi với bộ nhớ cache không? Có cách nào để kết nối lại daemon của tôi vào bộ nhớ đệm mà không cần khởi động lại nó (tương tự như việc buộc tải lại resolv.conf qua res_init()) không?
"* ... có cách nào để kết nối lại daemon của tôi vào bộ nhớ cache mà không cần khởi động lại nó ... *" bạn có cố gắng làm cho daemon của bạn gọi 'getaddrinfo()' "** thực sự **" thường xuyên không. Hãy nói 100 ++ lần? Hãy thử và theo dõi quyền truy cập vào 'nscd'. Tôi không thể kiểm tra điều này ở đây, nhưng có thể có một cơ hội daemon của bạn quyết định kiểm tra kết nối 'nscd' sau đó một lần nữa và nếu thành công sử dụng nó từ đó trở đi. – alk
"* Nếu tôi khởi động lại daemon, tôi nhận được cùng một hành vi ... *" bạn đang đề cập đến daemon của riêng bạn ở đây, không phải để 'nscd', phải không? – alk
Btw: Tôi có ý tưởng được đề cập ở trên để kiểm tra các nguồn của eglibc. – alk