Skip to content
This repository was archived by the owner on Sep 13, 2020. It is now read-only.

Commit f39071b

Browse files
author
Damian Kowalewski
committed
reduce time read from 2 seconds to 150 milliseconds
1 parent fba2fcd commit f39071b

File tree

1 file changed

+25
-19
lines changed

1 file changed

+25
-19
lines changed

unix/yun/client.c

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -68,29 +68,35 @@ int tcp_write(int sock, char* data) {
6868
}
6969

7070
int tcp_read(int sock, char* data, int size, int timeout_sec) {
71+
struct timeval tv;
72+
fd_set receive;
7173
int n_recv = 0;
7274
int n_tmp = 0;
73-
struct timeval tv;
74-
tv.tv_sec = 0;
75-
tv.tv_usec = 50000;
76-
setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&tv,sizeof(struct timeval));
7775
int bracketCount = 0;
7876
int readCount = 0;
79-
while(n_recv < size && readCount++ < timeout_sec * 1000 / 50){
80-
// need to put select to timeout asap
81-
n_tmp = recv(sock, data+n_recv, size-n_recv, 0);
82-
if (n_tmp == -1) {
83-
n_tmp = 0;
84-
}
85-
// Analyze the data to get the object asap.
86-
int i;
87-
for(i = 0; i < n_tmp; i ++) {
88-
if (data[n_recv + i] == '{') bracketCount++;
89-
if (data[n_recv + i] == '}') bracketCount--;
90-
}
91-
n_recv += n_tmp;
92-
if (n_recv > 0 && bracketCount == 0) {
93-
break;
77+
while(n_recv < size && readCount++ < timeout_sec * 10) {
78+
FD_ZERO(&receive);
79+
FD_SET(sock, &receive);
80+
tv.tv_sec = 0;
81+
tv.tv_usec = 100000;
82+
if(select(sock + 1, &receive, NULL, NULL, &tv) > 0) {
83+
if(FD_ISSET(sock, &receive)) {
84+
// need to put select to timeout asap
85+
n_tmp = recv(sock, data+n_recv, size-n_recv, 0);
86+
if (n_tmp == -1) {
87+
n_tmp = 0;
88+
}
89+
// Analyze the data to get the object asap.
90+
int i;
91+
for(i = 0; i < n_tmp; i ++) {
92+
if (data[n_recv + i] == '{') bracketCount++;
93+
if (data[n_recv + i] == '}') bracketCount--;
94+
}
95+
n_recv += n_tmp;
96+
if (n_recv > 0 && bracketCount == 0) {
97+
break;
98+
}
99+
}
94100
}
95101
}
96102
data[n_recv] = '\0';

0 commit comments

Comments
 (0)