edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/Errno.cs;C576154
File: Errno.cs
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/Errno.cs;C576154  (server)    10/2/2008 4:45 PM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Libraries.LCA_RESTRICTED/Builtins/Errno.cs;RubyFloatConversion1
@@ -155,5 +155,35 @@
                 : base(info, context) { }
 #endif
         }
+
+        [RubyClass("ENOTCONN"), Serializable]
+        public class NotConnectedError : ExternalException {
+            private const string/*!*/ M = "A request to send or receive data was disallowed because the socket is not connected and (when sending on a datagram socket using a sendto call) no address was supplied.";
+
+            public NotConnectedError() : this(null, null) { }
+            public NotConnectedError(string message) : this(message, null) { }
+            public NotConnectedError(string message, Exception inner) : base(MakeMessage(message, M), inner) { }
+            public NotConnectedError(MutableString message) : base(MakeMessage(ref message, M)) { ExceptionOps.InitializeException(this, message); }
+
+#if !SILVERLIGHT
+            protected NotConnectedError(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context)
+                : base(info, context) { }
+#endif
+        }
+
+        [RubyClass("ECONNRESET"), Serializable]
+        public class ConnectionResetError : ExternalException {
+            private const string/*!*/ M = "An existing connection was forcibly closed by the remote host.";
+
+            public ConnectionResetError() : this(null, null) { }
+            public ConnectionResetError(string message) : this(message, null) { }
+            public ConnectionResetError(string message, Exception inner) : base(MakeMessage(message, M), inner) { }
+            public ConnectionResetError(MutableString message) : base(MakeMessage(ref message, M)) { ExceptionOps.InitializeException(this, message); }
+
+#if !SILVERLIGHT
+            protected ConnectionResetError(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context)
+                : base(info, context) { }
+#endif
+        }
     }
 }
===================================================================
edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Parser/Symbols.cs;C597872
File: Symbols.cs
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Parser/Symbols.cs;C597872  (server)    10/14/2008 3:31 PM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Compiler/Parser/Symbols.cs;RubyFloatConversion1
@@ -34,6 +34,7 @@
         public static readonly string SingletonMethodUndefined = "singleton_method_undefined";
         public static readonly string Inherited = "inherited";
         public static readonly string RespondTo = "respond_to?";
+        public static readonly string ToF = "to_f";
         public static readonly string ToProc = "to_proc";
         public static readonly string ToS = "to_s";
         public static readonly string ToStr = "to_str";
===================================================================
edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyOps.cs;C597872
File: RubyOps.cs
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyOps.cs;C597872  (server)    10/14/2008 3:32 PM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyOps.cs;RubyFloatConversion1
@@ -1300,6 +1300,15 @@
             return context.LanguageContext == expectedLanguageContext && module.Version == expectedVersion;
         }
 
+        [Emitted] //ProtocolConversionAction
+        public static double/*!*/ ToFloatValidator(string/*!*/ className, object obj) {
+            if (obj is double) {
+                return (double)obj;
+            }
+
+            throw new InvalidOperationException(String.Format("{0}#to_f should return Float", className));
+        }
+
         #endregion
 
         #region Called by GetHashCode/Equals methods in generated .NET classes
===================================================================
edit: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/ProtocolConversionAction.cs;C597872
File: ProtocolConversionAction.cs
===================================================================
--- $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/ProtocolConversionAction.cs;C597872  (server)    10/14/2008 3:26 PM
+++ Shelved Change: $/Dev10/feature/vsl_dynamic/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/ProtocolConversionAction.cs;RubyFloatConversion1
@@ -63,6 +63,10 @@
                 return ConvertToArrayAction.Instance;
             }
 
+            if (parameterType == typeof(double)) {
+                return ConvertToFloatAction.Instance;
+            }
+
             return null;
         }
 
@@ -89,7 +93,7 @@
         protected abstract string/*!*/ ToMethodName { get; }
         protected abstract string/*!*/ ConversionResultValidator { get; }
         protected abstract string/*!*/ TargetTypeName { get; }
-        
+
         protected abstract bool TryImplicitConversion(MetaObjectBuilder/*!*/ metaBuilder, CallArguments/*!*/ args);
 
         internal void SetRule(MetaObjectBuilder/*!*/ metaBuilder, CallArguments/*!*/ args) {
@@ -180,8 +184,8 @@
             if (args.Target == null) {
                 metaBuilder.Result = Ast.Null();
                 return true;
-            }           
-            
+            }
+
             var convertedTarget = args.Target as TTargetType;
             if (convertedTarget != null) {
                 metaBuilder.Result = Ast.ConvertHelper(args.TargetExpression, typeof(TTargetType));
@@ -259,7 +263,7 @@
         protected override string/*!*/ ToMethodName { get { return Symbols.ToAry; } }
         protected override string/*!*/ TargetTypeName { get { return "Array"; } }
         protected override string/*!*/ ConversionResultValidator { get { return "ToArrayValidator"; } }
-        
+
         private ConvertToArrayAction() {
         }
 
@@ -314,12 +318,12 @@
 
         protected override bool TryImplicitConversion(MetaObjectBuilder/*!*/ metaBuilder, CallArguments/*!*/ args) {
             object target = args.Target;
-            
+
             if (args.Target == null) {
                 metaBuilder.SetError(AstFactory.OpCall("CreateTypeConversionError", Ast.Constant("nil"), Ast.Constant(TargetTypeName)));
                 return true;
             }
-            
+
             // TODO: other .NET primitive integer types
             if (target is int) {
                 metaBuilder.Result = Ast.ConvertHelper(args.TargetExpression, typeof(int));
@@ -361,8 +365,8 @@
             if (args.Target == null) {
                 metaBuilder.Result = Ast.False();
                 return true;
-            } 
-            
+            }
+
             if (target is bool) {
                 metaBuilder.Result = Ast.ConvertHelper(args.TargetExpression, typeof(bool));
                 return true;
@@ -395,7 +399,7 @@
         protected override bool TryImplicitConversion(MetaObjectBuilder/*!*/ metaBuilder, CallArguments/*!*/ args) {
             object target = args.Target;
             var targetExpression = args.TargetExpression;
-            
+
             if (args.Target == null) {
                 metaBuilder.SetError(AstFactory.OpCall("CreateTypeConversionError", Ast.Constant("nil"), Ast.Constant(TargetTypeName)));
                 return true;
@@ -426,4 +430,41 @@
             return false;
         }
     }
+
+    public sealed class ConvertToFloatAction : ProtocolConversionAction, IEquatable<ConvertToFloatAction> {
+        public static readonly ConvertToFloatAction Instance = new ConvertToFloatAction();
+
+        protected override string/*!*/ ToMethodName { get { return Symbols.ToF; } }
+        protected override string/*!*/ TargetTypeName { get { return "Float"; } }
+        protected override string/*!*/ ConversionResultValidator { get { return "ToFloatValidator"; } }
+
+        private ConvertToFloatAction() {
+        }
+
+        [Emitted]
+        public static ConvertToFloatAction/*!*/ Make() {
+            return Instance;
+        }
+
+        public bool Equals(ConvertToFloatAction other) {
+            return other != null;
+        }
+
+        protected override bool TryImplicitConversion(MetaObjectBuilder/*!*/ metaBuilder, CallArguments/*!*/ args) {
+            object target = args.Target;
+
+            if (args.Target == null) {
+                metaBuilder.SetError(AstFactory.OpCall("CreateTypeConversionError", Ast.Constant("nil"), Ast.Constant(TargetTypeName)));
+                return true;
+            }
+
+            // TODO: other .NET primitive numeric types
+            if (target is double) {
+                metaBuilder.Result = Ast.ConvertHelper(args.TargetExpression, typeof(double));
+                return true;
+            }
+
+            return false;
+        }
+    }
 }
===================================================================
