باستخدام سي العمومية ، لماذا بلدي gethostbyname تفشل بعد/DHCP قد تغير DNS الخادم ؟

StackOverflow https://stackoverflow.com/questions/125466

  •  02-07-2019
  •  | 
  •  

سؤال

إذا كان الخادم الخاص بنا (تشغيل الجهاز) يبدأ قبل تأجير DHCP قد تم الحصول عليها ثم لا يمكن الاتصال باستخدام اسم المضيف.

وإذا حدث ذلك فإنه يمكن العثور على المضيفين باستخدام عنوان IP ولكن ليس عن طريق DNS.

ظننت في البداية أن حليقة DNS ذاكرة التخزين المؤقت كان على خطأ كما حليقة اتصالات فشلت.ولكن أنا استخدم CURLOPT_DNS_CACHE_TIMEOUT لمنع حليقة من التخزين المؤقت العنوان لكن الاتصالات لا تزال فشلت.

هل كانت مفيدة؟

المحلول

اتضح أن سي العمومية gethostbyname_r لن تلقائيا تحديث انها التكوين إذا أن تغييرات التكوين.يجب عليك يدويا الاتصال res_init.انظر تقرير الشوائب أدناه.

ملاحظة:لا رجل الصفحة gethostbyname_r ولا rer_init ذكر هذا القيد.

الحل هو محدد جدا.يعمل لدينا منذ فترة طويلة الخادم ولكنه ليس الحل الأمثل.

لدي وظيفة أن يتحقق mtime من /etc/resolv.conf ضد آخر معروف mtime (0 DNE).إذا كان اثنان mtime تختلف ثم أدعو res_init.يتم استدعاء هذه الدالة في البرنامج عند بدء التشغيل ومن ثم بشكل دوري اختياريا تحديث التكوين.


على سي العمومية تقرير الشوائب

libc مخابئ resolv.conf إلى الأبد

...

هذا ما res_init () ، يطلق عليه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top