mirror of
https://github.com/archlinuxarm/PKGBUILDs.git
synced 2024-11-28 22:57:37 +00:00
43 lines
1,022 B
Diff
43 lines
1,022 B
Diff
|
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;
|
||
|
}
|