Bladeren bron

增加kcp发送消息阻塞消息的检查,超过两倍发送窗口就应该断开连接

tanghai 7 jaren geleden
bovenliggende
commit
01b9ac54f0

+ 1 - 0
Unity/Assets/Scripts/Module/Message/ErrorCode.cs

@@ -33,6 +33,7 @@ namespace ETModel
 		public const int ERR_PeerDisconnect = 202008;
 		public const int ERR_SocketCantSend = 202009;
 		public const int ERR_SocketError = 202010;
+		public const int ERR_KcpWaitSendSizeTooLarge = 202011;
 
 		public const int ERR_WebsocketPeerReset = 203001;
 		public const int ERR_WebsocketMessageTooBig = 203002;

+ 12 - 5
Unity/Assets/Scripts/Module/Message/Network/KCP/KChannel.cs

@@ -283,11 +283,11 @@ namespace ETModel
 			}
 
 			// 超时断开连接
-			if (timeNow - this.lastRecvTime > 40 * 1000)
-			{
-				this.OnError(ErrorCode.ERR_KcpChannelTimeout);
-				return;
-			}
+			//if (timeNow - this.lastRecvTime > 40 * 1000)
+			//{
+			//	this.OnError(ErrorCode.ERR_KcpChannelTimeout);
+			//	return;
+			//}
 
 			try
 			{
@@ -425,6 +425,13 @@ namespace ETModel
 
 		public override void Send(MemoryStream stream)
 		{
+			// 检查等待发送的消息,如果超出两倍窗口大小,应该断开连接
+			if (Kcp.KcpWaitsnd(this.kcp) > 256 * 2)
+			{
+				this.OnError(ErrorCode.ERR_KcpWaitSendSizeTooLarge);
+				return;
+			}
+			
 			ushort size = (ushort)(stream.Length - stream.Position);
 			byte[] bytes;
 			if (this.isConnected)