Buflo volas ok bajtojn de SOCKS-respondo. Ĝi ricevis tri. La sekva legado redonas b'', kaj la buflo aldonas ĝin, kontrolas la longon kaj reprovas senfine.

Tio estas eraro de EOF-traktado, ne malrapida prokura servilo, kiu bezonas pli longan tempolimon. Ĉe normala ricevo per fluo-soketo, malplena bajtĉeno signifas, ke la kontraŭparto malŝaltiĝis. La ceteraj kvin bajtoj ne alvenos per tiu konekto.

Preciza leghelpaĵo bezonas tri apartajn rezultojn: akumuli ne-malplenajn partojn, malsukcesi ĉe EOF antaŭ la bezonata longo, kaj plusendi tempolimon aŭ alian soketan eraron. Tiuj kazoj ne devus kunfandiĝi en unu ĝenerala reprova buflo.

Agordu la intencitan tempolimon de la soketo antaŭ la operacio, kaj legu la kampolongojn difinitajn de la prokura protokolo. Unu ricevo povas redoni nur parton de respondo. Male, peti grandan fiksan bufron ne igas ĉiun SOCKS-adreson havi tiun longon.

Ne ripari dependaĵon algluante malnovan MSG_WAITALL-peceton en ĝian fonton kaj supozante, ke ĝi kovras EOF, signalojn kaj platforman konduton. Preferu la subtenatan riparon de la prizorgata efektivigo, aŭ intence efektivigu la kontrakton de la helpaĵo, kiam la analizilo estas via kodo.

Konservu, kiom da bajtoj estis atenditaj kaj ricevitaj, sen protokoli akreditaĵajn ŝarĝojn. “EOF post tri el ok respondaj bajtoj” klarigas la rompitan interŝanĝon multe pli bone ol “la prokura servilo denove pendas”.

Rilataj artikoloj