| diff --git a/sanei/sanei_tcp.c b/sanei/sanei_tcp.c |
| index d6f8efe34..5e3c7a75d 100644 |
| --- a/sanei/sanei_tcp.c |
| +++ b/sanei/sanei_tcp.c |
| @@ -46,6 +46,7 @@ |
| #include <stdlib.h> |
| #include <string.h> |
| #include <limits.h> |
| +#include <time.h> |
| |
| #ifndef SSIZE_MAX |
| #define SSIZE_MAX LONG_MAX |
| @@ -130,6 +131,7 @@ sanei_tcp_read(int fd, u_char * buf, size_t count) |
| { |
| size_t bytes_recv = 0; |
| ssize_t rc = 1; |
| + int retry = 5; |
| |
| if (count > SSIZE_MAX) { |
| errno = EINVAL; |
| @@ -139,9 +141,21 @@ sanei_tcp_read(int fd, u_char * buf, size_t count) |
| while (bytes_recv < count && rc > 0) |
| { |
| rc = recv(fd, buf+bytes_recv, count-bytes_recv, 0); |
| + DBG(1, "%s: bytes received %d\n", __func__, rc); |
| if (rc > 0) |
| bytes_recv += rc; |
| - |
| + else { |
| + if ( errno == EAGAIN && retry-- ) { |
| + DBG(1, "%s: waiting %d\n", __func__, retry); |
| + /* wait for max 1s */ |
| + struct timespec req; |
| + struct timespec rem; |
| + req.tv_sec = 0; |
| + req.tv_nsec= 100000000; |
| + nanosleep(&req, &rem); |
| + rc = 1; |
| + } |
| + } |
| } |
| return bytes_recv; |
| } |