Per GNUTLS manual, `gnutls_record_recv()` can get GNUTLS_E_REHANDSHAKE
and if it is HTTP client, we should not close the connection and ignore
the error. The server can terminate the connection as before.
break;
case GNUTLS_E_AGAIN :
- errno = EAGAIN;
- break;
+ errno = EAGAIN;
+ break;
+
+ case GNUTLS_E_REHANDSHAKE :
+ // If used in client, ignore the error and try to read again...
+ if (http->mode == _HTTP_MODE_CLIENT)
+ {
+ errno = EAGAIN;
+ }
+ else
+ {
+ // Terminate the session as server...
+ errno = EPIPE;
+ }
+ break;
default :
- errno = EPIPE;
- break;
+ errno = EPIPE;
+ break;
}
result = -1;
break;
case GNUTLS_E_AGAIN :
- errno = EAGAIN;
- break;
+ errno = EAGAIN;
+ break;
default :
- errno = EPIPE;
- break;
+ errno = EPIPE;
+ break;
}
result = -1;