diff --git a/websocket/server/websocket_server.cpp b/websocket/server/websocket_server.cpp index 65b494273f2e750c26eb38d0b416e1e6a5bd083f..79524267a79c9411f184ceec6d215c54891e7310 100644 --- a/websocket/server/websocket_server.cpp +++ b/websocket/server/websocket_server.cpp @@ -188,6 +188,7 @@ bool WebSocketServer::InitTcpWebSocket(int port, uint32_t timeoutLimit) return false; } socketState_ = SocketState::INITED; + needSendCloseFrame_ = false; return true; } #else diff --git a/websocket/websocket_base.cpp b/websocket/websocket_base.cpp index 187a8834279f4f194b5e143bc23931720002509c..9428044e3934b0d42347ee252d2f2be007f28ffd 100644 --- a/websocket/websocket_base.cpp +++ b/websocket/websocket_base.cpp @@ -202,7 +202,9 @@ void WebSocketBase::SendCloseFrame(CloseStatusCode status) void WebSocketBase::CloseConnection(CloseStatusCode status, SocketState newSocketState) { LOGI("Close connection, status = %{public}d", static_cast(status)); - SendCloseFrame(status); + if (needSendCloseFrame_) { + SendCloseFrame(status); + } // can close connection right after sending back close frame. CloseConnectionSocket(ConnectionCloseReason::CLOSE, newSocketState); } diff --git a/websocket/websocket_base.h b/websocket/websocket_base.h index fd750d185d57649b23f5e5de1179ff76bd84c9dc..4d4097570eb9b85a8b7869af485e710593e9345f 100644 --- a/websocket/websocket_base.h +++ b/websocket/websocket_base.h @@ -99,6 +99,9 @@ protected: int connectionFd_ {-1}; + // Used by testframe to skip sendCloseFrame + bool needSendCloseFrame_ {true}; + // Callbacks used during different stages of connection lifecycle. CloseConnectionCallback closeCb_; FailConnectionCallback failCb_;