Index: Socket.cs
===================================================================
--- Socket.cs	(revision 92)
+++ Socket.cs	(working copy)
@@ -139,6 +139,7 @@
     public abstract class BasicSocket : RubyIO, IDisposable {
 
         private readonly Socket/*!*/ _socket;
+        protected static bool _doReverseLookup = true;
 
         protected Socket/*!*/ Socket {
             get { return _socket; }
@@ -150,6 +151,19 @@
             _socket = socket;
         }
 
+        [RubyMethod("do_not_reverse_lookup", RubyMethodAttributes.PublicSingleton)]
+        public static bool do_not_reverse_lookup_get(object/*!*/ self)
+        {
+            return !_doReverseLookup;
+        }
+
+        [RubyMethod("do_not_reverse_lookup=", RubyMethodAttributes.PublicSingleton)]
+        public static bool do_not_reverse_lookup_set(object/*!*/ self, bool reverse)
+        {
+            _doReverseLookup = !reverse;
+            return reverse;
+        }
+
         [RubyMethod("close_read")]
         public static void CloseRead(BasicSocket/*!*/ self) {
             self.Socket.Shutdown(SocketShutdown.Receive);
@@ -250,7 +264,14 @@
 
             result.Add(new MutableString(AddressFamilyToString(ep.AddressFamily)));
             result.Add(ep.Port);
-            result.Add(new MutableString(System.Net.Dns.GetHostEntry(ep.Address).HostName));
+            if (_doReverseLookup)
+            {
+                result.Add(new MutableString(System.Net.Dns.GetHostEntry(ep.Address).HostName));
+            }
+            else
+            {
+                result.Add(new MutableString(ep.Address.ToString()));
+            }
             result.Add(new MutableString(ep.Address.ToString()));
             return result;
         }
