IO多路复用-Select
来源:互联网 发布:网络封包 编辑:程序博客网 时间:2024/06/07 23:36
#include<stdio.h> #include<stdlib.h>#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>#include<string.h>#include<sys/time.h>#include<sys/ioctl.h>int main(){ int server_sockfd,client_sockfd; int server_len,client_len; struct sockaddr_in server_address,client_address; int result; char ch[1024]; fd_set readfds,testfds; //memset(ch,'\0',sizeof(ch)); server_sockfd = socket(AF_INET,SOCK_STREAM,0); server_address.sin_family = AF_INET; server_address.sin_addr.s_addr = INADDR_ANY; server_address.sin_port = htons(8888); server_len = sizeof(server_address); bind(server_sockfd,(struct sockaddr *)&server_address,server_len); listen(server_sockfd,5); FD_ZERO(&readfds); FD_SET(server_sockfd,&readfds); while(1){ printf("server waiting\n"); testfds = readfds; //阻塞 select(FD_SETSIZE,&testfds,(fd_set *)0,(fd_set *)0,(struct timeval *)0); int fd = 0; int nread; int len; //循环所有的文件描述符 for(fd ; fd < FD_SETSIZE; fd++){ //活动状态 if(FD_ISSET(fd,&testfds)){ //如果是服务端 那么就是新的客户端链接 加入描述符表 if(fd == server_sockfd){ client_len = sizeof(client_address); client_sockfd = accept(server_sockfd,(struct sockaddr *)&client_address,&client_len); FD_SET(client_sockfd,&readfds); printf("添加了一个客户端链接\n"); } //否则就是客户端的 else{ //客户端退出 表中删除对应描述符 ioctl(fd,FIONREAD,&nread); if(nread == 0){ close(fd); FD_CLR(fd,&readfds); printf("删除了一个客户端链接\n"); }else{ //操作对应描述符 len = read(fd,&ch,1024); write(fd,&ch,len); if(strncasecmp(ch,"stop",4) == 0){ close(fd); break; } } } } } }}
0 0
- IO多路复用--select
- select io 多路复用
- IO多路复用之select
- IO多路复用select
- IO多路复用学习select
- IO多路复用 Select模型
- IO多路复用之select
- IO多路复用-Select
- IO多路复用 - select
- select-IO多路复用
- IO多路复用之select
- io多路复用 select
- IO多路复用select函数
- select-IO多路复用
- 多路复用IO&select&poll
- IO多路复用之select
- IO多路复用-select()
- IO多路复用之select
- 定位
- React-native中DatePickerAndroid的使用
- gitstack破解 安装
- 微软自带后门
- java - 通过反射调用类的完整结构
- IO多路复用-Select
- Qt中文路径问题(Cannot find file: 进程"C:\Qt\4.8.5\bin\qmake.exe"退出,退出代码 2)
- 3.1.4.1 基本分页存储管理方式
- Intellij IDEA 提交代码到远程GitHub仓库
- MS14-058(CVE-2014-4113)利用代码
- spring框架整合ibatis的项目实例代码
- (1)ActivityThread分析
- ThinkPHP基础(一)搭建环境
- NwCreate之创建nwc文件