⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tcpservpoll01.lc

📁 unix network ,unix network unix network
💻 LC
字号:
/* include fig01 */#include    "unp.h"##  1 ##src/tcpcliserv/tcpservpoll01.c###include    <limits.h>          /* for OPEN_MAX */##  2 ##src/tcpcliserv/tcpservpoll01.c##int##  3 ##src/tcpcliserv/tcpservpoll01.c##main(int argc, char **argv)##  4 ##src/tcpcliserv/tcpservpoll01.c##{##  5 ##src/tcpcliserv/tcpservpoll01.c##    int     i, maxi, listenfd, connfd, sockfd;##  6 ##src/tcpcliserv/tcpservpoll01.c##    int     nready;##  7 ##src/tcpcliserv/tcpservpoll01.c##    ssize_t n;##  8 ##src/tcpcliserv/tcpservpoll01.c##    char    line[MAXLINE];##  9 ##src/tcpcliserv/tcpservpoll01.c##    socklen_t clilen;## 10 ##src/tcpcliserv/tcpservpoll01.c##    struct pollfd client[OPEN_MAX];## 11 ##src/tcpcliserv/tcpservpoll01.c##    struct sockaddr_in cliaddr, servaddr;## 12 ##src/tcpcliserv/tcpservpoll01.c##    listenfd = Socket(AF_INET, SOCK_STREAM, 0);## 13 ##src/tcpcliserv/tcpservpoll01.c##    bzero(&servaddr, sizeof(servaddr));## 14 ##src/tcpcliserv/tcpservpoll01.c##    servaddr.sin_family = AF_INET;## 15 ##src/tcpcliserv/tcpservpoll01.c##    servaddr.sin_addr.s_addr = htonl(INADDR_ANY);## 16 ##src/tcpcliserv/tcpservpoll01.c##    servaddr.sin_port = htons(SERV_PORT);## 17 ##src/tcpcliserv/tcpservpoll01.c##    Bind(listenfd, (SA *) &servaddr, sizeof(servaddr));## 18 ##src/tcpcliserv/tcpservpoll01.c##    Listen(listenfd, LISTENQ);## 19 ##src/tcpcliserv/tcpservpoll01.c##    client[0].fd = listenfd;## 20 ##src/tcpcliserv/tcpservpoll01.c##    client[0].events = POLLRDNORM;## 21 ##src/tcpcliserv/tcpservpoll01.c##    for (i = 1; i < OPEN_MAX; i++)## 22 ##src/tcpcliserv/tcpservpoll01.c##        client[i].fd = -1;      /* -1 indicates available entry */## 23 ##src/tcpcliserv/tcpservpoll01.c##    maxi = 0;                   /* max index into client[] array */## 24 ##src/tcpcliserv/tcpservpoll01.c##/* end fig01 *//* include fig02 */    for (;;) {## 25 ##src/tcpcliserv/tcpservpoll01.c##        nready = Poll(client, maxi + 1, INFTIM);## 26 ##src/tcpcliserv/tcpservpoll01.c##        if (client[0].revents & POLLRDNORM) {   /* new client connection */## 27 ##src/tcpcliserv/tcpservpoll01.c##            clilen = sizeof(cliaddr);## 28 ##src/tcpcliserv/tcpservpoll01.c##            connfd = Accept(listenfd, (SA *) &cliaddr, &clilen);## 29 ##src/tcpcliserv/tcpservpoll01.c##            for (i = 1; i < OPEN_MAX; i++)## 30 ##src/tcpcliserv/tcpservpoll01.c##                if (client[i].fd < 0) {## 31 ##src/tcpcliserv/tcpservpoll01.c##                    client[i].fd = connfd;  /* save descriptor */## 32 ##src/tcpcliserv/tcpservpoll01.c##                    break;## 33 ##src/tcpcliserv/tcpservpoll01.c##                }## 34 ##src/tcpcliserv/tcpservpoll01.c##            if (i == OPEN_MAX)## 35 ##src/tcpcliserv/tcpservpoll01.c##                err_quit("too many clients");## 36 ##src/tcpcliserv/tcpservpoll01.c##            client[i].events = POLLRDNORM;## 37 ##src/tcpcliserv/tcpservpoll01.c##            if (i > maxi)## 38 ##src/tcpcliserv/tcpservpoll01.c##                maxi = i;       /* max index in client[] array */## 39 ##src/tcpcliserv/tcpservpoll01.c##            if (--nready <= 0)## 40 ##src/tcpcliserv/tcpservpoll01.c##                continue;       /* no more readable descriptors */## 41 ##src/tcpcliserv/tcpservpoll01.c##        }## 42 ##src/tcpcliserv/tcpservpoll01.c##        for (i = 1; i <= maxi; i++) {   /* check all clients for data */## 43 ##src/tcpcliserv/tcpservpoll01.c##            if ((sockfd = client[i].fd) < 0)## 44 ##src/tcpcliserv/tcpservpoll01.c##                continue;## 45 ##src/tcpcliserv/tcpservpoll01.c##            if (client[i].revents & (POLLRDNORM | POLLERR)) {## 46 ##src/tcpcliserv/tcpservpoll01.c##                if ((n = readline(sockfd, line, MAXLINE)) < 0) {## 47 ##src/tcpcliserv/tcpservpoll01.c##                    if (errno == ECONNRESET) {## 48 ##src/tcpcliserv/tcpservpoll01.c##                        /* 4connection reset by client */## 49 ##src/tcpcliserv/tcpservpoll01.c##                        Close(sockfd);## 50 ##src/tcpcliserv/tcpservpoll01.c##                        client[i].fd = -1;## 51 ##src/tcpcliserv/tcpservpoll01.c##                    } else## 52 ##src/tcpcliserv/tcpservpoll01.c##                        err_sys("readline error");## 53 ##src/tcpcliserv/tcpservpoll01.c##                } else if (n == 0) {## 54 ##src/tcpcliserv/tcpservpoll01.c##                    /* 4connection closed by client */## 55 ##src/tcpcliserv/tcpservpoll01.c##                    Close(sockfd);## 56 ##src/tcpcliserv/tcpservpoll01.c##                    client[i].fd = -1;## 57 ##src/tcpcliserv/tcpservpoll01.c##                } else## 58 ##src/tcpcliserv/tcpservpoll01.c##                    Writen(sockfd, line, n);## 59 ##src/tcpcliserv/tcpservpoll01.c##                if (--nready <= 0)## 60 ##src/tcpcliserv/tcpservpoll01.c##                    break;      /* no more readable descriptors */## 61 ##src/tcpcliserv/tcpservpoll01.c##            }## 62 ##src/tcpcliserv/tcpservpoll01.c##        }## 63 ##src/tcpcliserv/tcpservpoll01.c##    }## 64 ##src/tcpcliserv/tcpservpoll01.c##}## 65 ##src/tcpcliserv/tcpservpoll01.c##/* end fig02 */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -