bool zSocket::sync() { //Zebra::logger->trace("zSocket::sync"); if(need_enc()) { unsigned int nSize = 0, current_cmd = 0, offset = 0; mutex.lock(); if (_snd_queue.rd_ready()) { nSize = _snd_queue.rd_size(); current_cmd = _current_cmd; offset = _enc_queue.rd_size(); _enc_queue.put(_snd_queue.rd_buf(), nSize); _snd_queue.rd_flip(nSize); _current_cmd = 0; } mutex.unlock(); if (nSize) packetPackEnc(_enc_queue, current_cmd, offset); if (_enc_queue.rd_ready()) { int retcode = sendRawData_NoPoll(_enc_queue.rd_buf(), _enc_queue.rd_size()); if (retcode > 0) { _enc_queue.rd_flip(retcode); } else if (-1 == retcode) { return false; } } } else { mutex.lock(); if (_snd_queue.rd_ready()) { _enc_queue.put(_snd_queue.rd_buf(), _snd_queue.rd_size()); _snd_queue.rd_flip(_snd_queue.rd_size()); } mutex.unlock(); if (_enc_queue.rd_ready()) { int retcode = sendRawData_NoPoll(_enc_queue.rd_buf(), _enc_queue.rd_size()); if (retcode > 0) { _enc_queue.rd_flip(retcode); } else if (-1 == retcode) { return false; } } } return true; }
bool CSocket::sync() { //Zebra::logger->debug("CSocket::sync"); if (_enc_queue.rd_ready()) { mutex.lock(); int retcode = sendRawData_NoPoll(_enc_queue.rd_buf(),_enc_queue.rd_size()); mutex.unlock(); if (retcode > 0) { _enc_queue.rd_flip(retcode); } else if (-1 == retcode) { return false; } } return true; }