In loop wol acht bytes fan in SOCKS-antwurd. Hy hat trije krigen. De folgjende lêzing jout b'' werom, en de loop foeget it ta, kontrolearret de lingte en besiket foar altyd op 'e nij.

Dat is in bug yn 'e EOF-ôfhandeling, gjin stadige proxy dy't in langere time-out nedich hat. By in normale ûntfangst fia in stream-socket betsjut in lege byte-string dat de oare kant de ferbining ferbrutsen hat. De oerbleaune fiif bytes sille net oer dy ferbining komme.

In helper foar krekt lêzen hat trije ferskillende útkomsten nedich: net-lege stikken gearfetsje, mislearje by EOF foar de fereaske lingte, en in time-out of in oare socket-flater trochjaan. Dy gefallen moatte net yn ien algemiene weromprobe-loop gearfalle.

Set de bedoelde time-out fan 'e socket foar de operaasje en lês de fjildlingten dy't it proxy-protokol opjout. Ien ûntfangst kin mar in part fan in antwurd weromjaan. Oarsom, it freegjen fan in grut fêst buffer makket net dat elk SOCKS-adres dy lingte hat.

Reparaasje in ôfhinklikens net troch in âld MSG_WAITALL-stikje yn 'e boarne te plakken en oan te nimmen dat it EOF, sinjalen en platfoarmgedrach dekt. Jou de foarkar oan 'e stipe fix fan 'e ûnderhalden ymplemintaasje, of ymplemintearje it kontrakt fan 'e helper bewust as de parser jo koade is.

Hâld by hoefolle bytes ferwachte en ûntfongen waarden, sûnder ladingen fan oanmeldgegevens te loggen. “EOF nei trije fan acht antwurdbytes” ferklearret de brutsen útwikseling folle better as “proxy hinget wer”.

Relatearre artikelen