diff --git a/server/2015Remote/Server.h b/server/2015Remote/Server.h index 06af2c4..47fb7c7 100644 --- a/server/2015Remote/Server.h +++ b/server/2015Remote/Server.h @@ -112,7 +112,12 @@ protected: m_bShouldUnmask = TRUE; std::string clientIP = getXForwardedFor(str); if (!clientIP.empty()) peer = clientIP; - } else { + } else if (m_bShouldUnmask != TRUE) { + // 仅当连接尚未被判定为 HTTP(初始 -1,或已确认非 HTTP)时才置为 FALSE。 + // 否则会误伤 HTTP 连接的分片续包:续包到达时读位置已越过掩码头, + // TryUnMask 找不到 "POST "(maskType==None),若在这里把 m_bShouldUnmask + // 从 TRUE 改回 FALSE,下一个新包(仍是 HTTP 掩码)就不再解掩码,从而被 Parse + // 判为 PARSER_FAILED。这正是「kill 后进程列表确认包到不了 NotifyProc」的根因。 m_bShouldUnmask = FALSE; } if (nullptr == m_Masker) {