EOF kezelése Python SOCKS olvasóciklusban
Kezelje az EOF-et explicit módon a SOCKS pontos olvasóciklusban ahelyett, hogy a lezárt kapcsolatot soha meg nem érkező időtúllépésnek tekintené.
Egy ciklus nyolc bájtot akar egy SOCKS válaszból. Hármat kapott. A következő olvasás b''-t ad vissza, a ciklus hozzáfűzi, ellenőrzi a hosszt, és örökre újra próbálkozik.
Ez EOF-kezelési hiba, nem lassú proxy, amelynek hosszabb időtúllépésre lenne szüksége. Normál stream socket fogadásnál az üres bájtsor azt jelenti, hogy a partner bontotta a kapcsolatot. A maradék öt bájt nem fog megérkezni ezen a kapcsolaton.
A pontos olvasó segédfüggvénynek három különböző kimenetre van szüksége: nem üres darabok gyűjtése, hiba az EOF-nál a szükséges hossz előtt, valamint időtúllépés vagy más socket hiba továbbítása. Ezeket az eseteket nem szabad egyetlen általános újrapróbálkozó ciklusba olvasztani.
Állítsa be a socket szándékolt időtúllépését a művelet előtt, és olvassa a proxy protokoll által megadott mezőhosszakat. Egyetlen fogadás csak a válasz egy részét adhatja vissza. Fordítva, egy nagy fix puffer kérése nem teszi minden SOCKS címet ilyen hosszúvá.
Ne javítson egy függőséget úgy, hogy egy régi MSG_WAITALL részletet illeszt a forráskódjába, és feltételezi, hogy lefedi az EOF-ot, a szignálokat és a platform viselkedését. Részesítse előnyben a karbantartott implementáció támogatott javítását, vagy ha az elemző a saját kódja, szándékosan valósítsa meg a segédfüggvény szerződését.
Őrizze meg, hány bájt volt várható és mennyi érkezett, hitelesítő adatok hasznos terheléseinek naplózása nélkül. Az „EOF nyolc válaszbájtból három után” sokkal jobban elmagyarázza a megszakadt cserét, mint a „a proxy megint lefagyott”.