سؤال

عند بدء التشغيل، يدعو برنامجي Getifaddrs () لمعرفة ما تتوفر واجهات الشبكة التي تتوفر لها IPv6 Link-Local الإصدار المتعددات. هذا يعمل بقدر ما يذهب، لكنه لا يتعامل مع القضية حيث تم إرجاع مجموعة أدوات واجهات الشبكة المتاحة بعد أن عاد getifaddrs ().

هل هناك طريقة لنظام التشغيل لإعلام برنامجي عندما تغيرت واجهات الشبكة، حتى أتمكن من استدعاء getifaddrs () مرة أخرى وتحديث قائمتي؟ أو أنا محكوم عليه بالاستفتاء getifaddrs () كل بضع ثوان، إلى الأبد؟

(ملاحظة: على نظام التشغيل Windows، أسمي GetAdaptersAdDresses () بدلا من getifaddrs ()، ولكن نفس المشكلة موجودة هناك)

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

المحلول

ربما تريد إلقاء نظرة على وظائف NotifyAddrchange و NotifyipinterFacechange.

نصائح أخرى

أيضا، طريقة Linux لتنفيذ ذلك هي فتح مقبس من العائلة AF_NETLINK و SubType NetLink_Route وقراءة الرسائل التي تصل إليها من Kernel، كما هو موضح في رمز المثال المضمن في "Man 7 Netlink". (بفضل Rob Searce لأشيرني إلى ذلك!)

في حالة مهتم أي شخص، وجدت المستند التالي على موقع مطور Apple الذي يصف كيفية إخطاره عند تغيير تكوين الشبكة. إنه غير تافه، لكنني حصلت على هذه التقنية للعمل بالنسبة لي. انظر القائمة 8 على وجه الخصوص.

الملاحظة الفنية TN1145 - العيش في بيئة TCP / IP ديناميكية "

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