diff --git a/sanei/sanei_tcp.c b/sanei/sanei_tcp.c index a57d7c7..d0a1e92 100644 --- a/sanei/sanei_tcp.c +++ b/sanei/sanei_tcp.c @@ -45,6 +45,7 @@ #include <unistd.h> #include <stdlib.h> #include <string.h> +#include <time.h> #ifdef HAVE_WINSOCK2_H #include <winsock2.h> @@ -123,14 +124,27 @@ sanei_tcp_write(int fd, const u_char * buf, int count) ssize_t sanei_tcp_read(int fd, u_char * buf, int count) { - ssize_t bytes_recv = 0, rc = 1; + ssize_t bytes_recv = 0, rc = 1; + int retry = 5; while (bytes_recv < count && rc > 0) { rc = recv(fd, buf+bytes_recv, count-bytes_recv, 0); + DBG(1, "%s: bytes received %d\n", __FUNCTION__, rc); if (rc > 0) bytes_recv += rc; - + else { + if ( errno == EAGAIN && retry-- ) { + DBG(1, "%s: waiting %d\n", __FUNCTION__, 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; }