|
@@ -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
|