tcp 使用select 治理客户端

tcp 使用select 管理客户端
想通过select函数管理客户端是否有数据传来。
帮忙看下这个用法有什么问题????





typedef struct _t_client
{
    int                 fd;
    struct sockaddr_in  addr;
}tClient;


//用户集合
tClient client[FD_SETSIZE]; 

int Init_tcp_server();

int process_data(tClient * pClient);

int main()
{
    int     i = 0;
    for(i = 0; i < FD_SETSIZE; i++)
    {
        client[i].fd = -1;
        memset(&client[i].addr, 0, sizeof(struct sockaddr_in));
    }

    Init_tcp_server();
}


int Init_tcp_server()
{
    int         i = 0;
    int         sockfd = 0;
int         listenfd = 0;
int         connectfd = 0;
int         maxi = 0;
int         maxfd = 0;
fd_set      rset, allset;
socket_len  sin_size = 0;
int         nready = 0;
int         recv_byte = 0;
char        recvbuf[1024] = {0};
char        temp[32] = {0};
struct sockaddr_in svraddr;
struct sockaddr_in cliaddr;
struct timeval wait;

    sin_size = sizeof(struct sockaddr_in);
    
listenfd = socket(AF_INET, SOCK_STREAM, 0);
if(listenfd < 0)
{
    perror("Create tcp socket fail!");
    exit(1);
}

memset(&svraddr, 0, sizeof(struct sockaddr_in));
svraddr.sin_family = AF_INET;
svraddr.sin_port = htons(4321);
svraddr.sin_addr.s_addr = INADDR_ANY;

if(bind(listenfd, (struct sockaddr *)&svraddr, sizeof(svraddr) == -1)
{
    perror("Bind fail!");
    close(listenfd);
    exit(1);
}

if(listen(listenfd, 5) == -1)
{
    perror("Listen fail!");
    close(listenfd);
    exit(1);
}

    maxfd = listenfd;

    FD_ZERO(&allset);
    FD_SET(listenfd, &allset);

    while(1)   
    {
        wait.tv_sec = 5;
        wait.tv_usec = 0;
        rset = allset;
        if(FD_ISSET(listenfd, &allset))
        {
            memset(cliaddr, 0, sizeof(struct sockaddr_in));
            if( (connectfd = connect(listenfd, (struct sockaddr *)&cliaddr, &sin_size)) == -1 )
            {
                perror("Connect fail!");
                continue;
            }

           
            inet_ntop(AF_INET, &cliaddr.sin_addr, temp, 32);
            printf(" [%s] [%d]  connected!\n", temp, ntohs(cliaddr.sin_port));
            for(i = 0; i < FD_SETSIZE; i++)    
            {
                if(client[i].fd < 0)
                {
                    client[i].fd= connectfd;
                    client[i].addr = cliaddr;
                }