Perhaps PuTTY is doing something slightly different, such as connecting to a different IP (for multi-ip hostnames) or to an IPv6 address. We can look into that, but first, please try running the following code:
using (var s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
s.ReceiveTimeout = 90000;
s.SendTimeout = 90000;
Does this time out (and when), or does it succeed?