@@ -29,11 +29,12 @@ struct ProcessingUnitStructureTCP{
29
29
sem_t sendrdy , recvrdy ;
30
30
uint8_t * message ;
31
31
size_t messageLength ;
32
+ bool done ;
32
33
};
33
34
34
35
typedef struct ProcessingUnitStructureTCP ProcessingUnitStructureTCP ;
35
36
36
- void * TCPLoop (void * pu );
37
+ void * ClientThread (void * pu );
37
38
38
39
bool CreateLinuxTCPClient (ProcessingUnitStructure * * pu , char * ip , int port ){
39
40
ProcessingUnitStructureTCP * puS ;
@@ -64,7 +65,7 @@ bool CreateLinuxTCPClient(ProcessingUnitStructure **pu, char *ip, int port){
64
65
puS -> sendSuccess = false;
65
66
66
67
// Start client thread
67
- ret = pthread_create (& puS -> clientThread , NULL , TCPLoop , puS );
68
+ ret = pthread_create (& puS -> clientThread , NULL , ClientThread , puS );
68
69
if (ret == 0 ){
69
70
success = true;
70
71
}else {
@@ -79,17 +80,16 @@ bool CreateLinuxTCPClient(ProcessingUnitStructure **pu, char *ip, int port){
79
80
return success ;
80
81
}
81
82
82
- void * TCPLoop (void * pu ){
83
+ void * ClientThread (void * pu ){
83
84
ProcessingUnitStructureTCP * puS ;
84
- bool done ;
85
85
int ret ;
86
86
char lengthString [20 ];
87
87
bool success ;
88
88
89
89
puS = (ProcessingUnitStructureTCP * )pu ;
90
90
91
- done = false;
92
- while (!done ){
91
+ puS -> done = false;
92
+ while (!puS -> done ){
93
93
// Not sending
94
94
puS -> sending = false;
95
95
puS -> sendSuccess = false;
@@ -101,55 +101,65 @@ void *TCPLoop(void *pu){
101
101
if (ret == 0 ){
102
102
puS -> connected = true;
103
103
}else {
104
+ printf ("Connect failed\n" );
104
105
puS -> connected = false;
106
+ sleep (1 );
105
107
}
106
108
}
107
109
108
- if (puS -> connected ){
110
+ if (puS -> connected && ! puS -> done ){
109
111
// Send
110
112
sem_wait (& puS -> sendrdy );
111
113
112
- sprintf (lengthString , "%15Ld" , (long long )puS -> messageLength );
113
-
114
- sendAll (puS -> serverSockets , (uint8_t * )lengthString , 15 );
115
- sendAll (puS -> serverSockets , puS -> message , puS -> messageLength );
114
+ if (!puS -> done ){
115
+ sprintf (lengthString , "%15Ld" , (long long )puS -> messageLength );
116
116
117
- puS -> sendSuccess = true;
118
- puS -> sending = false;
117
+ success = sendAll (puS -> serverSockets , (uint8_t * )lengthString , 15 );
118
+ if (success ){
119
+ success = sendAll (puS -> serverSockets , puS -> message , puS -> messageLength );
120
+ }
119
121
120
- // Receive
121
- success = recvAll ( puS -> serverSockets , ( uint8_t * ) lengthString , 15 ) ;
122
+ puS -> sendSuccess = true;
123
+ puS -> sending = false ;
122
124
123
- if (success ){
124
- puS -> messageLength = atof (lengthString );
125
- }
125
+ // Receive
126
+ success = recvAll (puS -> serverSockets , (uint8_t * )lengthString , 15 );
126
127
127
- puS -> message = malloc (puS -> messageLength );
128
+ if (success ){
129
+ puS -> messageLength = atof (lengthString );
128
130
129
- recvAll ( puS -> serverSockets , puS -> message , puS -> messageLength );
131
+ puS -> message = malloc ( puS -> messageLength );
130
132
131
- sem_post (& puS -> recvrdy );
133
+ success = recvAll (puS -> serverSockets , puS -> message , puS -> messageLength );
134
+ if (success ){
135
+ sem_post (& puS -> recvrdy );
136
+ }
137
+ }
138
+ }
132
139
}
133
140
}
141
+ }
142
+
143
+ void CloseLinuxTCPClient (ProcessingUnitStructure * pu ){
144
+ ProcessingUnitStructureTCP * puS ;
145
+
146
+ puS = (ProcessingUnitStructureTCP * )pu -> p ;
147
+
148
+ puS -> done = true;
149
+
150
+ sem_post (& puS -> recvrdy );
151
+ sem_post (& puS -> sendrdy );
134
152
135
153
// If connected, disconnect.
136
154
if (puS -> connected ){
137
155
close (puS -> serverSockets );
138
156
puS -> connected = false;
139
-
140
- sem_destroy (& puS -> sendrdy );
141
- sem_destroy (& puS -> recvrdy );
142
157
}
143
158
144
- pthread_exit (NULL );
145
- }
146
-
147
- void CloseLinuxTCPClient (ProcessingUnitStructure * pu ){
148
- ProcessingUnitStructureTCP * puS ;
149
-
150
- puS = (ProcessingUnitStructureTCP * )pu -> p ;
159
+ pthread_join (puS -> clientThread , NULL );
151
160
152
- close (puS -> serverSockets );
161
+ sem_destroy (& puS -> sendrdy );
162
+ sem_destroy (& puS -> recvrdy );
153
163
154
164
free (pu ); // Free #1
155
165
free (puS ); // Free #2
@@ -203,24 +213,3 @@ void Call(ProcessingUnitStructure *pu, uint8_t *s, size_t sLength, ByteArrayRefe
203
213
Receive (pu , d );
204
214
}
205
215
206
-
207
-
208
-
209
-
210
-
211
-
212
-
213
-
214
-
215
-
216
-
217
-
218
-
219
-
220
-
221
-
222
-
223
-
224
-
225
-
226
-
0 commit comments