From 665b2fae93a303c360fa003a1876f7d6854279a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=91=E9=A3=8E?= Date: Mon, 24 Feb 2014 17:03:34 +0800 Subject: [PATCH] move fd_set from stack to heap (in socket_server) , It avoid FD_ZERO every time. --- skynet-src/socket_server.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/skynet-src/socket_server.c b/skynet-src/socket_server.c index 8a76916b..7452b8dd 100644 --- a/skynet-src/socket_server.c +++ b/skynet-src/socket_server.c @@ -58,6 +58,7 @@ struct socket_server { struct event ev[MAX_EVENT]; struct socket slot[MAX_SOCKET]; char buffer[MAX_INFO]; + fd_set rfds; }; struct request_open { @@ -184,6 +185,8 @@ socket_server_create() { ss->alloc_id = 0; ss->event_n = 0; ss->event_index = 0; + FD_ZERO(&ss->rfds); + assert(ss->recvctrl_fd < FD_SETSIZE); return ss; } @@ -532,14 +535,12 @@ block_readpipe(int pipefd, void *buffer, int sz) { static int has_cmd(struct socket_server *ss) { - fd_set rfds; struct timeval tv = {0,0}; int retval; - FD_ZERO(&rfds); - FD_SET(ss->recvctrl_fd, &rfds); + FD_SET(ss->recvctrl_fd, &ss->rfds); - retval = select(ss->recvctrl_fd+1, &rfds, NULL, NULL, &tv); + retval = select(ss->recvctrl_fd+1, &ss->rfds, NULL, NULL, &tv); if (retval == 1) { return 1; }