Example #1
0
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;
}