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”.

Kapcsolódó cikkek