12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- 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;
- }
|