From joe at ximian.com Fri Jan 30 19:44:28 2004 From: joe at ximian.com (Joe Shaw) Date: Fri, 30 Jan 2004 13:44:28 -0500 Subject: [Help-gnutls] gnutls_bye(), return values, and looping Message-ID: <1075488268.3272.21.camel@posthaste.boston.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. Searching through google and the GnuTLS docs, it looks like most uses of gnutls_bye() ignore the return value, even if it's INTERRUPTED or AGAIN and immediately closes the fd after that. What is the correct way? 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. Thanks, Joe