[Help-gnutls] gnutls_bye(), return values, and looping

Nikos Mavroyanopoulos nmav at gnutls.org
Sun Feb 1 21:09:25 CET 2004

Quoting Joe Shaw <joe at ximian.com>:

> Hi,
> I am a little confused about how exactly to handle the return values
> from gnutls_bye().  I have some code which does the following:
>         do {
>         	ret = gnutls_bye (chan->session, GNUTLS_SHUT_RDWR);
>         } while (ret == GNUTLS_E_INTERRUPTED ||
>         	 ret == GNUTLS_E_AGAIN);
> In almost every case, this works out just fine, and I can close the file
> descriptor after that.
> I'm running into a problem on one of our test machines, though, that
> gnutls_bye() always returns GNUTLS_E_AGAIN, causing an infinite loop and
> using 100% CPU.
> Perhaps more importantly, is there any steadfast reason why it'd always
> return AGAIN?  Could it be a bug in GnuTLS that removing my do-while
> would really just be papering over?  Any info would be helpful.

GNUTLS_E_AGAIN is returned because the underlying layer (recv or send)
returned EAGAIN. gnutls does not use this error value.

> Thanks,
> Joe

nmav at gnutls.org

More information about the Gnutls-help mailing list