const redis_result* redis_client::run(dbuf_pool* pool, const redis_request& req, size_t nchildren) { // 重置协议处理状态 bool retried = false; redis_result* result; struct iovec* iov = req.get_iovec(); size_t size = req.get_size(); while (true) { if (!conn_.opened() && conn_.open(addr_, conn_timeout_, rw_timeout_) == false) { logger_error("connect server: %s error: %s", addr_, last_serror()); return NULL; } if (size > 0 && conn_.writev(iov, (int) size) == -1) { conn_.close(); if (retry_ && !retried) { retried = true; continue; } logger_error("write to redis(%s) error: %s", addr_, last_serror()); return NULL; } if (nchildren >= 1) result = get_redis_objects(pool, nchildren); else result = get_redis_object(pool); if (result != NULL) return result; conn_.close(); if (!retry_ || retried) break; retried = true; } return NULL; }
const redis_result* redis_client::run(dbuf_pool* pool, const string& req, size_t nchildren) { // 重置协议处理状态 bool retried = false; redis_result* result; while (true) { if (open() == false) return NULL; if (!req.empty() && conn_.write(req) == -1) { close(); if (retry_ && !retried) { retried = true; continue; } logger_error("write to redis(%s) error: %s", addr_, last_serror()); return NULL; } if (nchildren >= 1) result = get_redis_objects(pool, nchildren); else result = get_redis_object(pool); if (result != NULL) return result; close(); if (!retry_ || retried) break; retried = true; } return NULL; }