int i;
char *prior_fileprefix = h3ssl->fileprefix;
- memset (h3ssl, 0, sizeof (struct h3ssl));
+ if (h3ssl->ptr_data != NULL && h3ssl->ptr_data != nulldata)
+ free(h3ssl->ptr_data);
+
+ memset(h3ssl, 0, sizeof(struct h3ssl));
ssl_ids = h3ssl->ssl_ids;
for (i = 0; i < MAXSSL_IDS; i++) {
fprintf(stderr, "SSL_read %d on %llu failed\n",
SSL_get_error(stream, ret),
(unsigned long long) id);
- if (SSL_get_error(stream, ret) == SSL_ERROR_WANT_READ)
- return 0; /* retry we need more data */
- ERR_print_errors_fp(stderr);
+ switch (SSL_get_error(stream, ret)) {
+ case SSL_ERROR_WANT_READ:
+ return 0;
+ case SSL_ERROR_ZERO_RETURN:
+ return 1;
+ default:
+ ERR_print_errors_fp(stderr);
+ return -1;
+ }
return -1;
}