public static IClusterBuilderNext SocketOpts(this IClusterBuilderNext builder, ConnectionElement connection)
        {
            if (connection != null)
            {
                builder.SocketOpts(
                    connection.SendBufferSize,
                    connection.ReceiveBufferSize,
                    connection.ConnectionTimeout,
                    connection.SendTimeout,
                    connection.ReceiveTimeout);
            }

            return(builder);
        }
        public static IClusterBuilderNext SocketOpts(this IClusterBuilderNext services,
                                                     int?sendBufferSize         = null,
                                                     int?receiveBufferSize      = null,
                                                     TimeSpan?connectionTimeout = null,
                                                     TimeSpan?sendTimeout       = null,
                                                     TimeSpan?receiveTimeout    = null)
        {
            services.Use.Service <Func <ISocket> >(() => () =>
            {
                var retval = new AsyncSocket();

                if (sendBufferSize != null)
                {
                    retval.SendBufferSize = sendBufferSize.Value;
                }
                if (receiveBufferSize != null)
                {
                    retval.ReceiveBufferSize = receiveBufferSize.Value;
                }
                if (connectionTimeout != null)
                {
                    retval.ConnectionTimeout = connectionTimeout.Value;
                }
                if (sendTimeout != null)
                {
                    retval.SendTimeout = sendTimeout.Value;
                }
                if (receiveTimeout != null)
                {
                    retval.ReceiveTimeout = receiveTimeout.Value;
                }

                return(retval);
            });

            return(services);
        }