Hi! I'm new to ssl and am having some problems. I'm working on an http server; the interface is in perl and the internals are in perl and C; the SSL module is in C.
Everything works fine except for large file uploads (using "multipart/form-data"), where I lose a *variable* fraction of a percent of the bytes (eg, 1-10 bytes for 20 MB) *in the middle* of the transfer. Ie, the bytes read do not match the content-length, but while the multipart boundaries at beginning and end are intact, the file written out is too short. The only errors I receive from openssl are WANT_READ or WANT_WRITE, which I handle like EAGAIN (the socket is non-block). The code which handles the upload is identical for both SSL and non-SSL connections, except for the read function below, but there is no such problem with non-SSL transfers. The read function uses some of the perl API and is intended to provide the same functionality as perl's sysread (this is why the rest of the code is identical to the non-SSL upload): SV *sysread (SV *objref, SV *buf, int len) { // retrieve SSL object from perl HV *self = (HV*)SvRV(objref); SV **field = hv_fetch(self, "ssl", 3, 0); if (!field) return newSV(0); SSL *ssl = (SSL*)SvIV(*field); // set up buffer and read unsigned char data[len]; ERR_clear_error(); int bytes = SSL_read(ssl, data, len); // error handling if (bytes < 0) { int err = SSL_get_error(ssl, bytes); if (err == SSL_ERROR_WANT_READ || err == SSL_ERROR_WANT_WRITE) err = EAGAIN; else err *= -1; // the error is made negative to prevent collision with EAGAIN hv_store(self, "readerr", 3, newSViv (err), 0); return newSV (0); // perl undef } // return buffer contents to perl sv_setpvn(buf, data, bytes); return newSViv(bytes); } As stated, the only error which actually occurs is the WANT_READ or WANT_WRITE. I can also post the ctx setup*, etc, tho again, everything works fine except for large uploads. Large downloads are fine. My test client is firefox 7 over a slow wireless connection; the loss is less on local loopback but still occurs. What have I missed about this? Thanks -- MK * I use SSL_set_fd and not a BIO. -- "Enthusiasm is not the enemy of the intellect." (said of Irving Howe) "The angel of history[...]is turned toward the past." (Walter Benjamin) ______________________________________________________________________ OpenSSL Project http://www.openssl.org User Support Mailing List openssl-users@openssl.org Automated List Manager majord...@openssl.org