Browse Source

Z991239-1831 #comment 修改框架启动成功后监护重启的逻辑

杨诗友80174847 4 years ago
parent
commit
e091e2a099
2 changed files with 37 additions and 3 deletions
  1. 3 0
      Module/mod_healthmanager/mod_healthmanager.cpp
  2. 34 3
      Tool/guardian/guardian.cpp

+ 3 - 0
Module/mod_healthmanager/mod_healthmanager.cpp

@@ -988,6 +988,9 @@ bool CHealthManagerEntity::StopGuardian()
 	Sleep(3000);
 	return false;
 #else
+	int ret = m_pfUpgradeRestart(6, 0);
+	Dbg("healthmanager tell the guardian to quit.%d", ret);
+	Sleep(5000);
 	pid_t pID;
 	bool bFind = false;
 	bFind = FindGuardianPid(pID);

+ 34 - 3
Tool/guardian/guardian.cpp

@@ -658,6 +658,14 @@ void DataProcessLinux(int socket,const char*data)
 	break;
 	case GdOpUpgradeRestart:
 	{
+		if (pInfo->dwParam1 == 6)//HealthManager call guardian to quit
+		{
+			LogSingleMsg("HealthManager call guardian to quit");
+			close(socket);
+			close(g_sListen);
+			exit(0);//baoli?
+			break;
+		}
 		if (pInfo->dwParam1 == 4)//just know framework is starting...
 		{
 			LogSingleMsg("framework is starting...");
@@ -1042,7 +1050,7 @@ unsigned int __stdcall DoNetControl(void *pData)
 
 
 
-unsigned int InitListenSocketRVC()
+int InitListenSocketRVC()
 {
 #ifdef linux
 	socklen_t clilen;
@@ -1063,8 +1071,31 @@ unsigned int InitListenSocketRVC()
 	inet_aton(local_addr, &(serveraddr.sin_addr));
 
 	serveraddr.sin_port = htons(default_port);
-	bind(g_sListen, (sockaddr*)& serveraddr, sizeof(serveraddr));
-	listen(g_sListen, LISTENQ);
+	int tmpuse = 1;
+	if (setsockopt(g_sListen, SOL_SOCKET, SO_REUSEPORT, (char*)&tmpuse, sizeof(tmpuse)) < 0)
+	{
+		LogSingleMsg("setsockopt failed.", errno);
+		LogSingleMsg(strerror(errno));
+		close(g_sListen);
+		return -1;
+	}
+	int ret = bind(g_sListen, (sockaddr*)& serveraddr, sizeof(serveraddr));
+	if (ret != 0)
+	{
+		LogSingleMsg("bind failed.", errno);
+		LogSingleMsg(strerror(errno));
+		close(g_sListen);
+		return -1;
+	}
+	ret= listen(g_sListen, LISTENQ);
+	if (ret != 0)
+	{
+		LogSingleMsg("listen failed.", errno);
+		LogSingleMsg(strerror(errno));
+		close(g_sListen);
+		return -1;
+	}
+	LogSingleMsg("(linux)listen ok.", g_sListen);
 	cout << "listen on:" << g_sListen << endl;
 	return g_sListen;
 #else