@@ -49,6 +49,7 @@ ESP8266WebServerTemplate<ServerType>::ESP8266WebServerTemplate(IPAddress addr, i
49
49
, _currentVersion(0 )
50
50
, _currentStatus(HC_NONE)
51
51
, _statusChange(0 )
52
+ , _keepAlive(false )
52
53
, _currentHandler(nullptr )
53
54
, _firstHandler(nullptr )
54
55
, _lastHandler(nullptr )
@@ -325,6 +326,10 @@ void ESP8266WebServerTemplate<ServerType>::handleClient() {
325
326
bool callYield = false ;
326
327
327
328
if (_currentClient.connected () || _currentClient.available ()) {
329
+ if (_currentClient.available () && _keepAlive) {
330
+ _currentStatus = HC_WAIT_READ;
331
+ }
332
+
328
333
switch (_currentStatus) {
329
334
case HC_NONE:
330
335
// No-op to avoid C++ compiler warning
@@ -362,6 +367,7 @@ void ESP8266WebServerTemplate<ServerType>::handleClient() {
362
367
if (!keepCurrentClient) {
363
368
_currentClient = ClientType ();
364
369
_currentStatus = HC_NONE;
370
+ _keepAlive = false ;
365
371
_currentUpload.reset ();
366
372
}
367
373
@@ -374,6 +380,7 @@ template <typename ServerType>
374
380
void ESP8266WebServerTemplate<ServerType>::close() {
375
381
_server.close ();
376
382
_currentStatus = HC_NONE;
383
+ _keepAlive = false ;
377
384
if (!_headerKeysCount)
378
385
collectHeaders (0 , 0 );
379
386
}
@@ -429,7 +436,14 @@ void ESP8266WebServerTemplate<ServerType>::_prepareHeader(String& response, int
429
436
if (_corsEnabled) {
430
437
sendHeader (String (F (" Access-Control-Allow-Origin" )), String (" *" ));
431
438
}
432
- sendHeader (String (F (" Connection" )), String (F (" close" )));
439
+
440
+ if (_keepAlive && _server.hasClient ()) { // Disable keep alive if another client is waiting.
441
+ _keepAlive = false ;
442
+ }
443
+ sendHeader (String (F (" Connection" )), String (_keepAlive ? F (" keep-alive" ) : F (" close" )));
444
+ if (_keepAlive) {
445
+ sendHeader (String (F (" Keep-Alive" )), String (F (" timeout=" )) + HTTP_MAX_CLOSE_WAIT);
446
+ }
433
447
434
448
response += _responseHeaders;
435
449
response += " \r\n " ;
0 commit comments