[openssl-users] ssl_pending returns 0 despite having data to read

Nadia Lapkovskaya nadia at yaymedia.com
Wed Jan 11 20:07:43 UTC 2017


We are using openssl-1.0.2j. Noticed, that for http protocol everything is working fine, but when we are using our own binary protocol ssl_pending returns 0 all the time. We are using blocking socket. Tried with SSL_CTX_set_read_ahead set and unset.

Out test server sends back any info received from the client.

Test code looks like this:
bool write(const uint64_t* data, int count)
  int rc = SSL_write(_ssl, data, count * sizeof(uint64_t));
  return rc > 0 ? true : false;

bool read(uint64_t* data, int count)
  do {
      int rc = SSL_read(_ssl, data, count * sizeof(uint64_t));
      if (rc <= 0) {
          int err = SSL_get_error(_ssl, rc);
          std::string errs = ERR_error_string(err, nullptr);
          return false;
  } while (SSL_pending(_ssl));
  return true;

During first ssl_read we received eight bytes, and after that ssl_pending returns 0. If we continue reading despite having no pending data, ssl_read returns the rest of the data. 
Could you please suggest what is wrong here.

Best regards,

More information about the openssl-users mailing list