טיפול ב-EOF בלולאת קריאת SOCKS בפייתון
טפל ב-EOF במפורש בלולאת קריאה מדויקת של SOCKS במקום להתייחס לחיבור סגור כאל פסק זמן שלא מגיע לעולם.
לולאה רוצה שמונה בתים מתגובת SOCKS. היא קיבלה שלושה. הקריאה הבאה מחזירה b'', והלולאה מוסיפה אותו, בודקת את האורך ומנסה שוב לנצח.
זו תקלה בטיפול ב-EOF, לא פרוקסי איטי שזקוק לפסק זמן ארוך יותר. בקליטה רגילה דרך socket זרימה, מחרוזת בתים ריקה פירושה שהצד השני התנתק. חמשת הבתים הנותרים לא יגיעו דרך החיבור הזה.
עוזר קריאה מדויקת זקוק לשלוש תוצאות נפרדות: צבירת מקטעים לא ריקים, כשל ב-EOF לפני האורך הנדרש, והעברת פסק זמן או שגיאת socket אחרת. אסור שמקרים אלה ימוזגו ללולאת ניסיון חוזר גנרית אחת.
הגדר את פסק הזמן המיועד של ה-socket לפני הפעולה, וקרא את אורכי השדות שהפרוטוקול של הפרוקסי מגדיר. קליטה אחת יכולה להחזיר רק חלק מתגובה. לעומת זאת, בקשת מאגר קבוע גדול אינה הופכת כל כתובת SOCKS לאורך כזה.
אל תתקן תלות על ידי הדבקת קטע MSG_WAITALL ישן לתוך המקור שלה והנחה שהוא מכסה EOF, אותות והתנהגות פלטפורמה. העדף את התיקון הנתמך של המימוש המתוחזק, או יישם במכוון את החוזה של העוזר כשהמנתח הוא הקוד שלך.
שמור כמה בתים היו צפויים וכמה התקבלו, בלי לתעד מטעני אישורים. „EOF אחרי שלושה משמונה בתי תגובה” מסביר את החליפין השבור הרבה יותר טוב מ„הפרוקסי שוב נתקע”.