[wpinet] WebSocket: When Close() is called, call closed immediately (#5047)

This provides the closed callback with the real reason for the
connection being closed.  Keep closed from being called twice by adding
a check in SetClosed().
This commit is contained in:
Peter Johnson
2023-02-03 22:59:19 -08:00
committed by GitHub
parent 49459d3e45
commit b879a6f8c6
2 changed files with 6 additions and 2 deletions

View File

@@ -126,6 +126,7 @@ void WebSocket::Close(uint16_t code, std::string_view reason) {
SendClose(code, reason);
if (m_state != FAILED && m_state != CLOSED) {
m_state = CLOSING;
closed(code, reason);
}
}
@@ -337,8 +338,11 @@ void WebSocket::SetClosed(uint16_t code, std::string_view reason, bool failed) {
if (m_state == FAILED || m_state == CLOSED) {
return;
}
bool wasClosing = m_state == CLOSING;
m_state = failed ? FAILED : CLOSED;
closed(code, reason);
if (!wasClosing) {
closed(code, reason);
}
}
void WebSocket::Shutdown() {