@@ -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) {
@@ -207,24 +207,50 @@ size_t WiFiClient::write(const uint8_t *buf, size_t size) {
207
207
if (size==0 )
208
208
{
209
209
setWriteError ();
210
- return 0 ;
210
+ return 0 ;
211
211
}
212
212
213
213
size_t written = ServerDrv::sendData (_sock, buf, size);
214
- if (!written)
215
- {
216
- setWriteError ();
217
- return 0 ;
214
+ if (!written && _retrySend) {
215
+ written = retry (buf, size, true );
216
+ }
217
+ if (!written){
218
+ // close socket
219
+ ServerDrv::stopClient (_sock);
220
+ setWriteError ();
221
+ return 0 ;
218
222
}
223
+
219
224
if (!ServerDrv::checkDataSent (_sock))
220
225
{
221
- setWriteError ();
222
- return 0 ;
226
+ setWriteError ();
227
+ return 0 ;
223
228
}
224
229
225
230
return written;
226
231
}
227
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
+
228
254
int WiFiClient::available () {
229
255
if (_sock != 255 )
230
256
{
@@ -256,6 +282,10 @@ int WiFiClient::peek() {
256
282
return WiFiSocketBuffer.peek (_sock);
257
283
}
258
284
285
+ void WiFiClient::setRetry (bool retry) {
286
+ _retrySend = retry;
287
+ }
288
+
259
289
void WiFiClient::flush () {
260
290
// TODO: a real check to ensure transmission has been completed
261
291
}
0 commit comments