דער קאָד איז פֿאַר אַ HTTPS סערווער ניצן בלאַקינג סאַקאַץ:
request := '';
start := gettickcount;
repeat
if SSL_pending(ssl) > 0 then
begin
bytesin := SSL_read(ssl, buffer, sizeof(buffer)-1);
if bytesin > 0 then
begin
buffer[bytesin] := #0;
request := request + buffer;
end
else break; // read failed
end; // pending
until (gettickcount - start) > LARGETIMEOUT;
// "request" is ready, though possibly empty
SSL_pending () שטענדיק קערט נול און די SSL_read () איז קיינמאָל ריטשט. אויב די SSL_pending () רופן איז אַוועקגענומען, SSL_read () איז עקסאַקיוטאַד. פארוואס קען SSL_pending () נישט אָנווייַזן ווי פילע ביטעס זענען פאַראַנען?
באַמערקונג אַז אויב איר רופן SSL_read () און די נומער פון ביטעס וואָס איז אומגעקערט איז ווייניקער ווי דיין באַפער גרייס, איר'ווע לייענען אַלץ און זענען געטאן.
אויב די ינקאַמינג דאַטן זענען גרעסער ווי דיין באַפער גרייס, דער ערשטער SSL_read () רופן פילז די באַפער און איר קענען איבערחזרן רופן SSL_read () ביז איר קענען נישט פּלאָמבירן די באַפער.
אָבער אויב די ינקאַמינג דאַטן זענען אַן פּינטלעך קייפל פון דיין באַפער גרייס, די לעצטע פּעקל פון דאַטן פּלאָמבירן די באַפער. אויב איר פּרוּווט אן אנדער SSL_read () טינגקינג עס קען זיין מער דאַטן אויף אַ בלאַקינג כאָלעל, עס כאַנגז ינדעפאַנאַטלי. דערפאר די פאַרלאַנג צו קאָנטראָלירן ססל_פּענדינג () ערשטער. אָבער דאָס קען נישט ויסקומען צו אַרבעטן. [12 147] ווי טאָן איר ויסמיידן כאַנגגינג אויף אַ לעצט SSL_read ()? (איך קענען נישט ימאַדזשאַן די ענטפער איז צו גיין ניט-בלאַקינג, ווייַל דאָס מיינט אַז איר קען קיינמאָל נוצן SSL_read מיט בלאַקינג.)
UPDATE: די פאלגענדע אַרבעט. משמעות SSL_pending () אַרבעט נישט נאָך דער ערשטער SSL_read ():
request := '';
repeat
bytesin := SSL_read(ssl, buffer, sizeof(buffer)-1);
if bytesin > 0 then
begin
buffer[bytesin] := #0;
request := request + buffer;
end
else break; // read failed
until SSL_pending(ssl) <= 0;
// "request" is ready, though possibly empty