--- lynx-2.8.9rel.1.orig/src/tidy_tls.c +++ lynx-2.8.9rel.1/src/tidy_tls.c @@ -462,13 +462,25 @@ int SSL_read(SSL * ssl, void *buffer, in { int rc; - rc = (int) gnutls_record_recv(ssl->gnutls_state, buffer, (size_t) length); + do + { + rc = (int) gnutls_record_recv(ssl->gnutls_state, buffer, (size_t) length); + } + while ((rc == GNUTLS_E_AGAIN) || (rc == GNUTLS_E_INTERRUPTED)); if (rc < 0 && gnutls_error_is_fatal(rc) == 0) { if (rc == GNUTLS_E_REHANDSHAKE) { (void) gnutls_handshake(ssl->gnutls_state); - gnutls_record_send(ssl->gnutls_state, ssl->sendbuffer, (size_t) ssl->bytes_sent); - rc = (int) gnutls_record_recv(ssl->gnutls_state, buffer, (size_t) length); + do + { + rc = (int) gnutls_record_send(ssl->gnutls_state, ssl->sendbuffer, (size_t) ssl->bytes_sent); + } + while ((rc == GNUTLS_E_AGAIN) || (rc == GNUTLS_E_INTERRUPTED)); + do + { + rc = (int) gnutls_record_recv(ssl->gnutls_state, buffer, (size_t) length); + } + while ((rc == GNUTLS_E_AGAIN) || (rc == GNUTLS_E_INTERRUPTED)); } } @@ -500,7 +512,11 @@ int SSL_write(SSL * ssl, const void *buf { int rc; - rc = (int) gnutls_record_send(ssl->gnutls_state, buffer, (size_t) length); + do + { + rc = (int) gnutls_record_send(ssl->gnutls_state, buffer, (size_t) length); + } + while ((rc == GNUTLS_E_AGAIN) || (rc == GNUTLS_E_INTERRUPTED)); ssl->last_error = rc; if (rc < 0) {