// 停止连接代理,服务停止时调用
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());
}
Exemplo n.º 3
0
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;
}