# File lib/memcache.rb, line 134
    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