@@ -35,10 +35,10 @@ extern "C" {
3535
3636uint16_t WiFiClient::_srcport = 1024 ;
3737
38- WiFiClient::WiFiClient () : _sock(NO_SOCKET_AVAIL) {
38+ WiFiClient::WiFiClient () : _sock(NO_SOCKET_AVAIL), _retrySend( true ) {
3939}
4040
41- WiFiClient::WiFiClient (uint8_t sock) : _sock(sock) {
41+ WiFiClient::WiFiClient (uint8_t sock) : _sock(sock), _retrySend( true ) {
4242}
4343
4444int WiFiClient::connect (const char * host, uint16_t port) {
@@ -210,31 +210,47 @@ size_t WiFiClient::write(const uint8_t *buf, size_t size) {
210210 return 0 ;
211211 }
212212
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 );
221216 }
222- if (success) {
223- if (!ServerDrv::checkDataSent (_sock))
224- {
225- setWriteError ();
226- return 0 ;
227- }
228- } else {
217+ if (!written){
229218 // close socket
230219 ServerDrv::stopClient (_sock);
231220 setWriteError ();
232221 return 0 ;
233222 }
234223
224+ if (!ServerDrv::checkDataSent (_sock))
225+ {
226+ setWriteError ();
227+ return 0 ;
228+ }
229+
235230 return written;
236231}
237232
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+
238254int WiFiClient::available () {
239255 if (_sock != 255 )
240256 {
@@ -266,6 +282,10 @@ int WiFiClient::peek() {
266282 return WiFiSocketBuffer.peek (_sock);
267283}
268284
285+ void WiFiClient::setRetry (bool retry) {
286+ _retrySend = retry;
287+ }
288+
269289void WiFiClient::flush () {
270290 // TODO: a real check to ensure transmission has been completed
271291}
0 commit comments