سؤال

عند خلق المقبس في جاوة:

new Socket(host, port);

ومنشئ المقبس سيحاول الاتصال <م> منفذ المضيف قبل أن يعود. على ويندوز، وهذا فشل على الفور تقريبا المضيفين قابلة للوصول ولكن لينكس يمكن أن يستغرق ما يصل إلى 5 دقائق للالمقبس انتهاء مهلة.

وأنا على علم أنه إذا كان لدي السيطرة على خلق المقابس، يمكنني القيام به:

Socket s = new Socket();
s.bind(..);
s.connect(.., timeout);

ولكن كنت أود أن يكون بدلا من استخدام OS قيمة افتراضية معقولة. هل هناك طريقة لتغيير هذا الإعداد على لينكس؟

والشكر

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

المحلول

وأعتقد أنك تريد /proc/sys/net/ipv4/tcp_syn_retries. الافتراضي هو عادة 5 أو 6 الذي يخرج إلى حوالي 3 دقائق.

لاحظ أن هذه المنظومة.

نصائح أخرى

وأنصح ضد إعدادات نظام التشغيل المتغيرة لأنها قد تؤثر على التطبيقات الأخرى بشكل غير متوقع. طريقة Socket.setSoTimeout() قد تساعدك أيضا.

ومن BTW ليس صحيحا تماما، أن لينكس وويندوز تتصرف بشكل مختلف هنا. إلى جانب إعادة المحاولة SYN الأولية (التي يمكن تكوينها على لينكس وويندوز) دولة جارة فضلا عن غيرها من أجهزة التوجيه إرسال الحزم RST أيضا أن تلعب دورا في ذلك.

إذا فشلت محاولة اتصال على ويندوز فورا، فمن المحتمل أنه تم RSTed ذلك eighter من قبل جهاز توجيه أو واعترف الجار قابلة للوصول على مستوى ARP. حاول الأمر arp -a -v على ويندوز لرؤية المضيفين بعيد المنال - التي تحصل على رفض بسرعة

لينكس يمكنك استخدام ip neigh لسرد الدولة وسائل الأتصال من المحطات على الشبكة المحلية.

وإنها فهمت أن هذا يعتمد على المهلة الافتراضية TCP / IP للنظام (240 ثانية افتراضيا؟) ... خيار واحد هو محاولة اللف تلك، ولكن هذا يمكن أن يؤثر على أي برامج أخرى على نفس الجهاز والتي تعتمد على قيمة المهلة. وفي هذه الحالة، قد يكون أكثر أمانا لمجرد خفض قيمة "مهلة" في مكالمتك جافا الاتصال ()، بدلا من ذلك.

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