@@ -199,6 +199,16 @@ size_t WiFiClientSecure::write(const uint8_t *buf, size_t size)
199
199
if (!_connected) {
200
200
return 0 ;
201
201
}
202
+ if (_lastWriteTimeout != _timeout){
203
+ struct timeval timeout_tv;
204
+ timeout_tv.tv_sec = _timeout/1000 ;
205
+ timeout_tv.tv_usec = 0 ;
206
+ if (setSocketOption (SO_SNDTIMEO, (char *)&timeout_tv, sizeof (struct timeval )) >= 0 )
207
+ {
208
+ _lastWriteTimeout = _timeout;
209
+ }
210
+ }
211
+
202
212
int res = send_ssl_data (sslclient, buf, size);
203
213
if (res < 0 ) {
204
214
stop ();
@@ -209,6 +219,18 @@ size_t WiFiClientSecure::write(const uint8_t *buf, size_t size)
209
219
210
220
int WiFiClientSecure::read (uint8_t *buf, size_t size)
211
221
{
222
+ if (_lastReadTimeout != _timeout){
223
+ if (fd () >= 0 ){
224
+ struct timeval timeout_tv;
225
+ timeout_tv.tv_sec = _timeout/1000 ;
226
+ timeout_tv.tv_usec = 0 ;
227
+ if (setSocketOption (SO_RCVTIMEO, (char *)&timeout_tv, sizeof (struct timeval )) >= 0 )
228
+ {
229
+ _lastReadTimeout = _timeout;
230
+ }
231
+ }
232
+ }
233
+
212
234
int peeked = 0 ;
213
235
int avail = available ();
214
236
if ((!buf && size) || avail <= 0 ) {
@@ -393,6 +415,8 @@ int WiFiClientSecure::setTimeout(uint32_t seconds)
393
415
}
394
416
395
417
int WiFiClientSecure::fd () const
418
+
419
+ int WiFiClientSecure::setSocketOption(int option, char * value, size_t len)
396
420
{
397
421
return sslclient->socket ;
398
422
}
0 commit comments