int clildfolw(int *fdsin, int fdsnum) { printf("[%d] child start\n", getpid()); int *fdsout = new int[fdsnum]; while (true) { if (g_signal.HandleSignals() < 0) break; memset(fdsout, 0, sizeof(int)* fdsnum); int nRet = select_timeout(fdsin, fdsnum, fdsout, NULL); if (nRet <= 0) { printf("[%d] select_timeout failed\n", getpid()); break; } for (int i = 0; i < nRet; i++) { if (fdsout[i] != 0) { printf("[%d] select fd OK %d\n", getpid(), fdsout[i]); char buff[128] = { 0 }; int len = read(fdsout[i], buff, 1); if (len == 0) { printf("[%d] socket close %s,%d\n", getpid(), strerror(errno),fdsout[i]); delete fdsout; return 0; } if (len < 0) { printf("[%d] read failed %s,%d\n", getpid(), strerror(errno),fdsout[i]); continue; } if (len == 1) printf("[%d] read 1 byte :%s\n", getpid(), buff); } } } delete fdsout; return 0; }