I totally didn't realize I was in the TNTcpProtocol file...so not being able to throw out the packet makes sense.
That said, why would everyone get disconnected in this case? Only the player who sent the malformed packet should get booted.
1. If Player A sends out a malformed TCP packet to everybody, wouldn't everybody have to close the connection? I don't understand why the sender would be booted from the way the code is written. The Close() calls are in OnReceive and OnProcessBuffer(). Is there a way on the client to debug and see who the sender is and possibly what RFC it was trying to send?
2. Also, can you explain why we Close if if (bytes == 0) in OnReceive()?
3. More possible symptoms, that I thought were unrelated but you never know...
Failed to call RFC VRC_EventDispatcherRFC._TriggerAudioSource: failed to convert parameters
Expected args: System.Int32, System.String
Received args: System.Byte[], System.Int32
I understand that it says the passed params and expected params aren't matching up, but it doesn't happen all the time. I've checked and double checked to make sure our function params and RFC caller params are in sync.
4. Quick shower thought, could something be happening to TCP packets when a ton of UDP is being sent at the same time? At the time of the crash, we a number of TCP packets being sent on repeat (maybe not a good idea?) as well as all the voice UDP. I've know I've heard about issues using both TCP and UDP at the same time...