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
return nil if text =~ /^END/
v, cache_key, flags, bytes = text.split(/ /)
value = sock.read(bytes.to_i)
sock.read(2)
sock.gets
rescue SystemCallError, IOError => err
server.close
raise MemCacheError, err.message
end
begin
return Marshal.load(value)
rescue ArgumentError, TypeError => err
server.close
raise MemCacheError, err.message
end
end
end