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 System.Net.Sockets;
...
using (var s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
{
s.ReceiveTimeout = 90000;
s.SendTimeout = 90000;
s.Connect("68.87.20.5", 25);
}
Does this time out (and when), or does it succeed?