Thanks for Jagannadha and David for their replies and help with this. 

I delved into the server-side of the code yesterday and found the
fault (luckily it's someone elses!).

Basically the server wasn't using select and fd_set/fd_isset
correctly, and was terminating the socket after 32k of recieved data.

Still, I've learnt a lot from David and Jagannadha, thanks again for
taking the time to reply to my post.

Michael.

On 8/12/05, Jagannadha Bhattu Gosukonda <[EMAIL PROTECTED]> wrote:
> Call ERR_clear_error() before while loop and call
> ERR_get_error_line_data in a loop till it returns 0 inside
> SSL_ERROR_SYSCALL case. This may give you some idea on what went
> wrong.
> 
> JB
> 
> On 8/11/05, Michael <[EMAIL PROTECTED]> wrote:
> > On 8/11/05, David Schwartz <[EMAIL PROTECTED]> wrote:
> >
> > <snip>
> >
> > > > My code uses blocking sockets, has the SSL_CTX
> > > > SSL_MODE_ENABLE_PARTIAL_WRITE option set and loops on the ssl_read but
> > > > the socket is closed after the first 32k is sent.
> > > >
> > > > Why, if a message block size is 16k, does the first 32k of a message
> > > > get written/read, then the socket dropped?
> >
> > <snip>
> >
> > >         Give us example code or more detailed information about what you 
> > > mean by
> > > "the socket dropped" and how you determined that.
> > >         My bet is simply that there's a bug in your code. With 
> > > non-blocking
> > > sockets, you have to test the return value of SSL_read and properly handle
> > > partial or failed sends. You may get a failed send if there was 
> > > insufficient
> > > space to fit a single block of protocol data (or if protocol data was sent
> > > that corresponds to zero bytes of application data!). You may get a 
> > > partial
> > > send.
> >
> > Thanks for your reply David - I think you're probably right about my code! 
> > ;-)
> >
> > Upon your suggestion I added some more cases to test the return code
> > of ssl_write and found that I am getting a SSL_ERROR_SYSCALL after the
> > first 32 bytes.
> >
> > Here is is the code. As mentioned before, I have the SSL_CTX set with
> > partial writes enabled, the main write loop is as follows (for
> > clarity,I've removed all the tests of ssl_write other than those that
> > get called).
> >
> > --start------------
> > char error_str[BUFF_SIZE]
> > char out_buf[BUFFSIZE];
> > int sent_bytes=0;
> > int offset=0;
> > int bytes_to_send = <length of data in out_buf>
> >
> > fprintf(stderr, "- Attempting to write %d bytes\n", bytes_to_send);
> >
> > while(bytes_to_send){
> >
> >    sent_bytes = SSL_write(p_ssl, out_buf+offset, bytes_to_send);
> >
> >    switch(SSL_get_error(p_ssl, sent_bytes)) {
> >        case SSL_ERROR_NONE:
> >            bytes_to_send -= sent_bytes;
> >            offset += sent_bytes;
> >            fprintf(stderr, "- Written %d bytes\n", sent_bytes);
> >            break;
> >        case SSL_ERROR_SYSCALL:
> >            error_str = Err_error_string(Err_get_error());
> >            fprintf(stderr, "- SSL_ERROR_SYSCALL: %s\n", error_str);
> >            return false; // exit routine
> >        default:
> >            fprintf(stderr, "- SSL_write reports %d\n", sent_bytes);
> >            return false; // exit routine
> >    }
> > }
> > --end--------------
> >
> > When I try and write more than 32k I get the following messages...
> >
> > - Attempting to write 59266 bytes
> > - Written 16384 bytes
> > - Written 16384 bytes
> > - SSL_ERROR_SYSCALL: error:00000000:lib(0):func(0):reason(0)
> >
> > I have SSL_load_error_strings() earlier in my code, but don't get any
> > more information than this.
> >
> > I'm still at a loss as to whats happening here, but many thanks for
> > your help in getting this far.
> >
> > Michael.
> > ______________________________________________________________________
> > OpenSSL Project                                 http://www.openssl.org
> > User Support Mailing List                    openssl-users@openssl.org
> > Automated List Manager                           [EMAIL PROTECTED]
> >
> ______________________________________________________________________
> OpenSSL Project                                 http://www.openssl.org
> User Support Mailing List                    openssl-users@openssl.org
> Automated List Manager                           [EMAIL PROTECTED]
>
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager                           [EMAIL PROTECTED]

Reply via email to