[gnutls-help] gnutls_record_send says it sent more than I told it to!?
Nikos Mavrogiannopoulos
n.mavrogiannopoulos at gmail.com
Tue Feb 2 18:34:26 CET 2016
On Tue, 2016-02-02 at 11:23 +0100, Mathieu Chouquet-Stringer wrote:
> Hello,
>
> I've coded an application in C and I use gnutls version 3.4.8 (3.4.8
> -1
> on Fedora 23 x86_64).
>
> My program is just a TLS front end for some of my applications which
> don't know how to speak TLS.
>
> I don't use threads but use epoll to manage all active sessions.
>
> I've been trying to diagnose a bug and as such I've added a bunch of
> printf all around the code.
>
> I have a function that does the following when epoll says there
> something to read:
>
> received = recv(con->fd, buffer, con->peer->rec_size);
>
> if (received > 0) {
> wrote = gnutls_record_send(con->peer->session,
> buffer, received);
> if (wrote == GNUTLS_E_INTERRUPTED || wrote ==
> GNUTLS_E_AGAIN)
> return 1;
> if (wrote > received)
> fprintf(stderr, "BUG at %d: wrote %ld,
> received: %ld\n",
> __LINE__, wrote, received);
> } else {
> /* do something else here */
> }
>
> rec_size is basically <= 16k and <= to what
> gnutls_record_get_max_size
> returned.
>
> Everyonce in a while, the fprintf shows me this:
> BUG at 661: wrote 10380, received: 10364
> BUG at 661: wrote 16384, received: 15092
> BUG at 661: wrote 16384, received: 11376
> BUG at 661: wrote 16384, received: 11400
> BUG at 661: wrote 16384, received: 11400
> BUG at 661: wrote 6892, received: 6780
> BUG at 661: wrote 6892, received: 6780
Could it be that you are resuming a previously interrupted send? If the
previous send was interrupted and returned GNUTLS_E_AGAIN or
GNUTLS_E_INTERRUPTED then it will be resumed on the next call, unless
you call gnutls_record_discard_queued().
regards,
Nikos
More information about the Gnutls-help
mailing list