#include "inet.h"
#define BUFSIZE 1024

int server(int fd){
    char b[BUFSIZE];
    int n;

    if((n = read(fd, b, BUFSIZE)) < 0)
        return 0;
    b[n] = '\0';
    printf("fd = %d, n = %d, b = \"%s\"\n", fd, n, b);

    return n;
}

void error(char *s)

int main(int argc, char **argv){
    int sockfd, newfd;
    struct sockaddr_in sin, cli;
    int chilen;
    fd_set allfds, fds;       
    int fd;

    if((sockfd = socket(PF_INET, SOCK_STREAM, 0)) < 0)
        error("cannot create socket");
    bzero((char*)&sin, sizeof(sin));
    sin.sin_family = PF_INET;
    sin.sin_addr.s_addr = htonl(INADDR_ANY);
    sin.sin_port = htons(SERVER_PORT);
    if(bind(socked, (struct sock add *)&sin, sizeof(sin)) <0)
        error("cannot bind");

    if(listen(socked, 5) <0)
        error("cannot listen");
    FD_ZERO(&allfds);
    FD_SET(sockfd, &allfds);
    while(1) {
        fds = allfds;
        if (select(FD_SETSIZE, &fds, NULL , NULL ,NULL) < 0)    
            error("cannot select");
        for(fd = 0; fd < FD_SETSIZE; fd++)
            if(FD_ISSET(fd, $fds)) {
                if(fd == sockfd) {
                    clilen = sizeof(cli);
                    if ( (newfd = accept(socked, (struct sockaddr *)&cli, &chilen)) < 0)
                        error("cannot accept");
                        printf("Accepted new connection fd = %d\n", fd);
                        FD_SET(newfd, &allfds);
                } else if (server(fd) = 0) {
                    printf("Closed connection : fd = %d\n", fd);
                    if(shutdown(fd, SHUT_RDWR) <0)
                        error("cannot shutdown");
                    FD_CLR(fd,&allfds);
                    close(fd); 
                }
            }
    }
    return 0;
}


这个例子里对 服务器 对于所有可能的入力出力文件描述符 》》》 fdset表现的所有bit一个一个的检查(是否是这样理解呢?)
比如这种情况下 有   6 5 4 3 2 1 0  个文件描述符号  服务器端就得 每次0 1 2 3 4 5 6 ,0 1 2 3 4 5 6的进行查询

能不能取一个minfd和maxfd   比如只有 3 4在通信  那么取maxfd=5   minfd = 2   这样服务端就可以2 3 4 5, 2 3 4 5的进行查询入力出力了 ?

希望高手能帮忙解决下了,什么好感谢的了啊  所有的分都奉上了