# File lib/memcache.rb, line 97
    def get(key)
        @mutex.synchronize do
            raise MemCacheError, "No active servers" unless self.active?
            cache_key = make_cache_key(key)
            server = get_server_for_key(cache_key)

            sock = server.socket
            if sock.nil?
                raise MemCacheError, "No connection to server"
            end

            value = nil
            begin
                sock.write "get #{cache_key}\r\n"
                text = sock.gets # "VALUE <key> <flags> <bytes>\r\n"
                return nil if text =~ /^END/ # HACK: no regex

                v, cache_key, flags, bytes = text.split(/ /)
                value = sock.read(bytes.to_i)
                sock.read(2) # "\r\n"
                sock.gets    # "END\r\n"
            rescue SystemCallError, IOError => err
                server.close
                raise MemCacheError, err.message
            end

            # Return the unmarshaled value.
            begin
                return Marshal.load(value)
            rescue ArgumentError, TypeError => err
                server.close
                raise MemCacheError, err.message
            end
        end
    end