كيفية منع منافذ الشبكة التي تركت مفتوحة على تحطم البرنامج
-
06-07-2019 - |
سؤال
أخذت شبكات الكمبيوتر الفصل الدراسي الماضي وفعل بعض ج البرمجة في لينكس (باستخدام gcc) لمشاريع بلدي.واحدة مملة للغاية من شيء ظللت الوقوع إذا كان البرنامج تحطمت أو المتوقفة (الذي لا ثم يجب أن تضغط على زر Ctrl+C قتله), منفذ الشبكة سيظل مفتوحا لمدة دقيقة أو نحو ذلك.لذلك إذا أردت على الفور تشغيل البرنامج مرة أخرى, وأود أن تذهب أولا إلى ملف الرأس, تغيير المنفذ ، طبعة جديدة البرنامج ثم أخيرا تشغيله.ومن الواضح أن هذا يحصل مملة جدا سريع جدا.
هل هناك أي طريقة لتكوين حيث ميناء سراحه فورا بمجرد عملية قتل ؟ إما عن طريق بعض الإعدادات في لينكس ، أو في makefile على البرنامج ، أو حتى برمجيا في C ؟
تحرير:أنا في اشارة الى عند كتابة server و اختيار منفذ محدد لاستضافة البرنامج.
المحلول
تعيين الخيار SO_REUSEADDR
على مأخذ التوصيل.
int yes = 1;
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int));
نصائح أخرى
أراهن أنه حوالي دقيقتين :)
كما @Cogsy الإشارة ، SO_REUSEADDR
مأخذ الخيار هو صديقك.تجعل نفسك على دراية TCP الولايات المتحدة TIME_WAIT
الدولة أن يسبب لك المشاكل:
أفترض البرنامج كنت تكتب خادم ، لذلك تحتاج إلى استخدام معروفة الميناء.إذا كان هذا هو الحال, يجب عليك استخدام SO_REUSE_ADDR الخيار على المقبس كما أشار Cogsy.
إذا من ناحية أخرى كنت تكتب عميل sw, ثم يجب تجنب اختيار منفذ معين ، مما يسمح النظام على يد واحد عشوائي.