פארוואס קען די SSL_pending call שטענדיק ווייַזן נול?

דער קאָד איז פֿאַר אַ 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
7
задан Witness Protection ID 44583292 7 July 2011 в 21:16
поделиться