Shorter socket-timeouts after WebSocket::end() (#1245) (#1246)

This commit is contained in:
Mark Plomer
2021-08-28 21:27:32 +02:00
committed by GitHub
parent 6048d026d0
commit 501c090ef5
3 changed files with 8 additions and 8 deletions
+5 -1
View File
@@ -167,10 +167,14 @@ public:
} }
} }
/* Emit close event */
WebSocketContextData<SSL, USERDATA> *webSocketContextData = (WebSocketContextData<SSL, USERDATA> *) us_socket_context_ext(SSL, WebSocketContextData<SSL, USERDATA> *webSocketContextData = (WebSocketContextData<SSL, USERDATA> *) us_socket_context_ext(SSL,
(us_socket_context_t *) us_socket_context(SSL, (us_socket_t *) this) (us_socket_context_t *) us_socket_context(SSL, (us_socket_t *) this)
); );
/* Set shorter timeout (use ping-timeout) to avoid long hanging sockets after end() on broken connections */
Super::timeout(webSocketContextData->idleTimeoutComponents.second);
/* Emit close event */
if (webSocketContextData->closeHandler) { if (webSocketContextData->closeHandler) {
webSocketContextData->closeHandler(this, code, message); webSocketContextData->closeHandler(this, code, message);
} }
+1 -1
View File
@@ -364,7 +364,7 @@ private:
auto *webSocketData = (WebSocketData *)(us_socket_ext(SSL, s)); auto *webSocketData = (WebSocketData *)(us_socket_ext(SSL, s));
auto *webSocketContextData = (WebSocketContextData<SSL, USERDATA> *) us_socket_context_ext(SSL, us_socket_context(SSL, (us_socket_t *) s)); auto *webSocketContextData = (WebSocketContextData<SSL, USERDATA> *) us_socket_context_ext(SSL, us_socket_context(SSL, (us_socket_t *) s));
if (webSocketContextData->sendPingsAutomatically && !webSocketData->hasTimedOut) { if (webSocketContextData->sendPingsAutomatically && !webSocketData->isShuttingDown && !webSocketData->hasTimedOut) {
webSocketData->hasTimedOut = true; webSocketData->hasTimedOut = true;
us_socket_timeout(SSL, s, webSocketContextData->idleTimeoutComponents.second); us_socket_timeout(SSL, s, webSocketContextData->idleTimeoutComponents.second);
/* Send ping without being corked */ /* Send ping without being corked */
+2 -6
View File
@@ -88,13 +88,9 @@ public:
while ((int) idleTimeout - margin * 2 >= margin * 2 && margin < 16) { while ((int) idleTimeout - margin * 2 >= margin * 2 && margin < 16) {
margin = (unsigned short) (margin << 1); margin = (unsigned short) (margin << 1);
} }
/* We should have no margin if not using sendPingsAutomatically */
if (!sendPingsAutomatically) {
margin = 0;
}
idleTimeoutComponents = { idleTimeoutComponents = {
idleTimeout - margin, idleTimeout - (sendPingsAutomatically ? margin : 0), /* reduce normal idleTimeout if it is extended by ping-timeout */
margin margin /* ping-timeout - also used for end() timeout */
}; };
} }