@@ -35,10 +35,10 @@ extern "C" {
35
35
36
36
uint16_t WiFiClient::_srcport = 1024 ;
37
37
38
- WiFiClient::WiFiClient () : _sock(NO_SOCKET_AVAIL) {
38
+ WiFiClient::WiFiClient () : _sock(NO_SOCKET_AVAIL), _retrySend( true ) {
39
39
}
40
40
41
- WiFiClient::WiFiClient (uint8_t sock) : _sock(sock) {
41
+ WiFiClient::WiFiClient (uint8_t sock) : _sock(sock), _retrySend( true ) {
42
42
}
43
43
44
44
int WiFiClient::connect (const char * host, uint16_t port) {
@@ -210,31 +210,47 @@ size_t WiFiClient::write(const uint8_t *buf, size_t size) {
210
210
return 0 ;
211
211
}
212
212
213
- bool success = false ;
214
- size_t written = 0 ;
215
- for (int i=0 ; i<5 ; i++) {
216
- written = ServerDrv::sendData (_sock, buf, size);
217
- if (written) {
218
- success = true ;
219
- break ;
220
- }
213
+ size_t written = ServerDrv::sendData (_sock, buf, size);
214
+ if (!written && _retrySend) {
215
+ written = retry (buf, size, true );
221
216
}
222
- if (success) {
223
- if (!ServerDrv::checkDataSent (_sock))
224
- {
225
- setWriteError ();
226
- return 0 ;
227
- }
228
- } else {
217
+ if (!written){
229
218
// close socket
230
219
ServerDrv::stopClient (_sock);
231
220
setWriteError ();
232
221
return 0 ;
233
222
}
234
223
224
+ if (!ServerDrv::checkDataSent (_sock))
225
+ {
226
+ setWriteError ();
227
+ return 0 ;
228
+ }
229
+
235
230
return written;
236
231
}
237
232
233
+ size_t WiFiClient::retry (const uint8_t *buf, size_t size, bool write) {
234
+ size_t rec_bytes = 0 ;
235
+
236
+ if (write) {
237
+
238
+ // RETRY WRITE
239
+ for (int i=0 ; i<5 ; i++) {
240
+ rec_bytes = ServerDrv::sendData (_sock, buf, size);
241
+ if (rec_bytes) {
242
+ break ;
243
+ }
244
+ }
245
+ return rec_bytes;
246
+
247
+ } else {
248
+ // RETRY READ
249
+ // To be implemented, if needed
250
+ }
251
+
252
+ }
253
+
238
254
int WiFiClient::available () {
239
255
if (_sock != 255 )
240
256
{
@@ -266,6 +282,10 @@ int WiFiClient::peek() {
266
282
return WiFiSocketBuffer.peek (_sock);
267
283
}
268
284
285
+ void WiFiClient::setRetry (bool retry) {
286
+ _retrySend = retry;
287
+ }
288
+
269
289
void WiFiClient::flush () {
270
290
// TODO: a real check to ensure transmission has been completed
271
291
}
0 commit comments