كيفية منع منافذ الشبكة التي تركت مفتوحة على تحطم البرنامج

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

سؤال

أخذت شبكات الكمبيوتر الفصل الدراسي الماضي وفعل بعض ج البرمجة في لينكس (باستخدام gcc) لمشاريع بلدي.واحدة مملة للغاية من شيء ظللت الوقوع إذا كان البرنامج تحطمت أو المتوقفة (الذي لا ثم يجب أن تضغط على زر Ctrl+C قتله), منفذ الشبكة سيظل مفتوحا لمدة دقيقة أو نحو ذلك.لذلك إذا أردت على الفور تشغيل البرنامج مرة أخرى, وأود أن تذهب أولا إلى ملف الرأس, تغيير المنفذ ، طبعة جديدة البرنامج ثم أخيرا تشغيله.ومن الواضح أن هذا يحصل مملة جدا سريع جدا.

هل هناك أي طريقة لتكوين حيث ميناء سراحه فورا بمجرد عملية قتل ؟ إما عن طريق بعض الإعدادات في لينكس ، أو في makefile على البرنامج ، أو حتى برمجيا في C ؟

تحرير:أنا في اشارة الى عند كتابة server و اختيار منفذ محدد لاستضافة البرنامج.

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

المحلول

تعيين الخيار SO_REUSEADDR على مأخذ التوصيل.

int yes = 1;
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int));

من Beej دليل شبكة البرمجة.

نصائح أخرى

أراهن أنه حوالي دقيقتين :) كما @Cogsy الإشارة ، SO_REUSEADDR مأخذ الخيار هو صديقك.تجعل نفسك على دراية TCP الولايات المتحدة TIME_WAIT الدولة أن يسبب لك المشاكل:

 

أفترض البرنامج كنت تكتب خادم ، لذلك تحتاج إلى استخدام معروفة الميناء.إذا كان هذا هو الحال, يجب عليك استخدام SO_REUSE_ADDR الخيار على المقبس كما أشار Cogsy.

إذا من ناحية أخرى كنت تكتب عميل sw, ثم يجب تجنب اختيار منفذ معين ، مما يسمح النظام على يد واحد عشوائي.

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