Best practice reading from `Socket` / `NetworkStream`? - C#