def gets(key, raw = false)
with_server(key) do |server, cache_key|
logger.debug { "gets #{key} from #{server.inspect}" } if logger
result = with_socket_management(server) do |socket|
socket.write "gets #{cache_key}\r\n"
keyline = socket.gets
if keyline.nil? then
server.close
raise MemCacheError, "lost connection to #{server.host}:#{server.port}"
end
raise_on_error_response! keyline
return nil if keyline == "END\r\n"
unless keyline =~ /(\d+) (\w+)\r/ then
server.close
raise MemCacheError, "unexpected response #{keyline.inspect}"
end
value = socket.read $1.to_i
socket.read 2
socket.gets
[value, $2]
end
result[0] = Marshal.load result[0] unless raw
result
end
rescue TypeError => err
handle_error nil, err
end