summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/idevice.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/idevice.c b/src/idevice.c
index 3c312d2..0a62907 100644
--- a/src/idevice.c
+++ b/src/idevice.c
@@ -590,14 +590,23 @@ LIBIMOBILEDEVICE_API idevice_error_t idevice_connection_receive_timeout(idevice_
#ifdef HAVE_OPENSSL
int r = SSL_read(connection->ssl_data->session, (void*)((char*)(data+received)), (int)len-received);
+ if (r > 0) {
+ received += r;
+ } else {
+ int sslerr = SSL_get_error(connection->ssl_data->session, r);
+ if (sslerr == SSL_ERROR_WANT_READ) {
+ continue;
+ }
+ break;
+ }
#else
ssize_t r = gnutls_record_recv(connection->ssl_data->session, (void*)(data+received), (size_t)len-received);
-#endif
if (r > 0) {
received += r;
} else {
break;
}
+#endif
}
debug_info("SSL_read %d, received %d", len, received);