diff --git a/c/main.c b/c/main.c index c509e85..5f530ee 100644 --- a/c/main.c +++ b/c/main.c @@ -58,13 +58,15 @@ int main() teml->run(teml,fifo); //启动终端 - log_manager_stop(logsmanager); - pthread_join(logsmanager->pid,NULL); - logsmanager->pid = -1; + //等待网络管理器进程结束 pthread_join(networkmanager->pid,NULL); + networkmanager->pid = -1; close(fifo[1]); + log_manager_stop(logsmanager); + pthread_join(logsmanager->pid,NULL); + logsmanager->pid = -1; return 1; } \ No newline at end of file diff --git a/c/network/network.c b/c/network/network.c index 2a3cdd7..c722605 100644 --- a/c/network/network.c +++ b/c/network/network.c @@ -217,6 +217,7 @@ int shutdown_pool(netm *self) self->pool[i].status = -1; close(self->pool[i].fifo_fd[1]); } + self->statue = ALL_STOP; return 1; } @@ -239,6 +240,7 @@ int server_run(int port,int fifo_fd,netm *self) epoll_ctl(epfd, EPOLL_CTL_ADD, self->http_fd, &ev); struct epoll_event events[10]; self->epoll_fd = epfd; + self->statue = SERVER_ON; for(;;) { /*工作循环-----------------------------*/ @@ -306,6 +308,7 @@ void *run_network(void *self_d) { netm *self = (netm*)self_d; self->start_pool(self); + self->statue = POOL_ON; server_run(self->port,self->fifo_fd[0],self); self->shutdown_pool(self); } @@ -324,5 +327,6 @@ int init_networkmanager(netm *self,int *fifo,log_manager *logmanager,int port) //初始化参数 self->logmanager = logmanager; self->err_indictor = (indiector*)malloc(sizeof(indiector)); + self->statue = ALL_STOP; return 0; } \ No newline at end of file diff --git a/c/network/network.h b/c/network/network.h index e5082d4..043d018 100644 --- a/c/network/network.h +++ b/c/network/network.h @@ -1,6 +1,9 @@ #ifndef NETWORK #define NETWORK +#define POOL_ON 1 +#define SERVER_ON 2 +#define ALL_STOP 0 #include #include "tools/log/log.h" @@ -36,6 +39,7 @@ typedef struct network_manager//网络管理器 int port; int epoll_fd; int http_fd; + int statue; }netm; typedef struct rebot_message diff --git a/c/tools/quit/quit.c b/c/tools/quit/quit.c index 82e4051..f747e8f 100644 --- a/c/tools/quit/quit.c +++ b/c/tools/quit/quit.c @@ -15,28 +15,32 @@ int quit_server(netm *self) { if(self ==NULL) return -1; + + //关闭epoll监听 if(self->epoll_fd != -1) { epoll_ctl(self->epoll_fd,EPOLL_CTL_DEL,self->http_fd,NULL); epoll_ctl(self->epoll_fd,EPOLL_CTL_DEL,self->fifo_fd[0],NULL); self->epoll_fd = -1; } - //关闭epoll监听 + //关闭socket监听 if(self->http_fd != -1) { + shutdown(self->http_fd, SHUT_RDWR); if(close(self->http_fd)==-1) - return -1; + perror("http"); self->http_fd =-1; } - //关闭socket监听 + //关闭管道监听 if(self->fifo_fd[1] != -1) { if(close(self->fifo_fd[1])==-1) return -1; self->fifo_fd[1] = -1; } - //关闭管道监听 + free(self->err_indictor); + self->statue = POOL_ON; return 0; } @@ -49,7 +53,15 @@ void quit_all(int status,void *self_p) logs *netlog = (logs*)malloc(sizeof(logs)); netlog->next = NULL; memcpy(netlog->log,"shuting down networkserver",27); - quit_server(resouce->network); + + if(resouce->network->statue == SERVER_ON) + { + quit_server(resouce->network); + } + if(resouce->network->statue == POOL_ON) + { + resouce->network->shutdown_pool(resouce->network); + } resouce->loger->in_log(netlog,resouce->loger); free(resouce->network); //释放网络资源