- 论坛徽章:
- 0
|
各位大侠,小弟弄不懂select的运行机制,想请教!!
select和poll是关于同步IO的吗?
以下这段代码的意思???
- int listenfd, connfd, maxfd=0;
- int nready;
- fd_set rset, allset;
- struct sockaddr_in cliaddr, servaddr;
- int clilen;
-
- listenfd = socket(AF_INET, SOCK_STREAM, 0);
- if (listenfd >; maxfd) maxfd = listenfd;
-
- memset(&servaddr, 0, sizeof(servaddr));
- servaddr.sin_family = AF_INET;
- servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
- servaddr.sin_port = htons(4321);
-
- bind(listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr));
-
- FD_ZERO(&allset);
- FD_SET(listenfd, &allset);
- listen(listenfd, 10);
-
- /* main loop */
- while (1) {
- rset = allset;
- nready = select(maxfd+1, &rset, NULL, NULL, NULL);
-
- if (FD_ISSET(listenfd, &rset)) {
- /* 有新的客户端连接请求
- clilen = sizeof(cliaddr);
- connfd = accept(listenfd, (struct sockaddr*)&cliaddr,&clilen);
- if (client_num == FD_SETSIZE) {
- fprintf(stderr, "too many clients\n");
- exit(-1);
- }
- FD_SET(connfd, &allset);
- if (connfd >; maxfd) maxfd = connfd;
- if (--nready <= 0) continue;
- }
-
- //以下依次判断FD_ISSET(某个socket, &rset) 并做相应处理
- }
复制代码 |
|