// 停止连接代理,服务停止时调用 void CLogicHandler::stopConnectProxy() { m_connectMgr->clearConnectProxy(); m_service->stopProxy(); ReleaseWarnLog("stop connect proxy, service id = %u, name = %s", getSrvId(), getSrvName()); }
// 清理停止连接代理,服务启动时调用,比如服务异常退出,则启动前调用该函数,关闭之前的代理连接 void CLogicHandler::cleanUpConnectProxy(const unsigned int proxyId[], const unsigned int len) { m_connectMgr->clearConnectProxy(); m_service->cleanUpProxy(proxyId, len); ReleaseWarnLog("clean up connect proxy, service id = %u, name = %s", getSrvId(), getSrvName()); }
bool CDataHandler::writeToSkt(CConnectManager* connMgr, Connect* conn, const char* data, const unsigned int len, int& wtLen) { wtLen = 0; int nWrite = ::write(conn->fd, data, len); if (nWrite > 0) { connMgr->setConnectNormal(conn); // 写数据成功则连接一般情况下都正常 wtLen = nWrite; } if (nWrite < 0) { if (errno == EINTR) return writeToSkt(connMgr, conn, data, len, wtLen); // 被信号中断则继续读写数据 if (errno == EAGAIN) return true; // 没有socket缓冲区可写了 ReleaseWarnLog("direct write to socket buffer error, peer ip = %s, port = %d, id = %lld, nWrite = %d, errno = %d, info = %s", CSocket::toIPStr(conn->peerIp), conn->peerPort, conn->id, nWrite, errno, strerror(errno)); conn->connStatus = closed; // 通知调用者关闭此连接 return false; } return true; }