تقنية

recv(0) في بايثون: هل البايتات الفارغة تثبت انقطاع الاتصال؟

استقبال صفر يعيد بايتات فارغة ثم استقبال واحد يعيد R
الطرفان متصلان. [1] [2] [3]

نطلب صفر بايتات من زوج محلي. [1] [2] [3]

الخلاصة السريعة

لا؛ recv(0) ليست اختبارًا لانقطاع الاتصال. [1] [2] [3]

  • نرسل R بين مقبسين محليين. [1] [2] [3]
  • تعيد recv(0) القيمة b'' هنا. [1] [2] [3]
  • بعدها تعيد recv(1) البايت R. [1] [2] [3]
  • طلب الصفر لم يستهلك البيانات. [1] [2] [3]
  • المهلة 2 ثانية؛ نغلق في finally. [1] [2] [3]
  • ويندوز 3.12.14؛ دون UDP وSSL ومقبس مغلق. [1] [2] [3]

المثال

import socket as s
a,b=s.socketpair()
try:
 a.settimeout(2);b.settimeout(2)
 b.sendall(b'R')
 print(a.recv(0))
 print(a.recv(1))
finally:
 a.close();b.close()

[1] [2] [3]

المخرجان b'' ثم b'R'. [1] [2] [3]

الحجم والحالة

الحجم المطلوب صفر، فتعيد نسختنا نتيجة فارغة قبل استقبال البيانات. بقاء R يبين أن هذا الناتج لا يثبت الانقطاع. [1] [2] [3]

البايت R لم يستهلكه طلب الصفر
البيانات باقية. [1] [2] [3]

حدود المثال

زوج محلي دون خادم خارجي. لا نعمم على UDP أو SSL أو المقابس المغلقة أو كل الإصدارات. [1] [2] [3]

المراجع

  1. Python: socket
  2. CPython 3.12.14: socketmodule.c
  3. CPython 3.12.14: socket.py
  4. موضوع تك: لغة بايثون — مفردات
  5. موضوع تك: تطبيقات بايثون — مفردات

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