def set(key, value, expiry = 0)
@mutex.synchronize do
raise MemCacheError, "No active servers" unless self.active?
raise MemCacheError, "Update of readonly cache" if @readonly
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
marshaled_value = Marshal.dump(value)
command = "set #{cache_key} 0 #{expiry} #{marshaled_value.size}\r\n" + marshaled_value + "\r\n"
begin
sock.write command
sock.gets
rescue SystemCallError, IOError => err
server.close
raise MemCacheError, err.message
end
end
end