poll使用示例
来源:互联网 发布:淘宝办签证泄露信息 编辑:程序博客网 时间:2024/05/02 00:10
server.cpp
#include <stddef.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <stdint.h>#include <unistd.h>#include <errno.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <netinet/tcp.h>#include <sys/select.h>#include <poll.h>#include <netdb.h>#include <limits.h>#define ip "192.168.188.133"#define port 8888#define INFTIM 10000int main(int argc, char* argv[]){int afd, sfd;struct sockaddr_in servaddr;//创建socket文件描述符sfd = socket(AF_INET, SOCK_STREAM, 0);if(sfd == -1){perror("sfd == -1");exit(1);}//防止端口复用int reuse = 1 ;setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, (void*)&reuse, sizeof(reuse));//初始化socketmemset(&servaddr, 0, sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_port = htons(port) ;servaddr.sin_addr.s_addr = inet_addr(ip);//绑定套接字if(bind(sfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) == -1){perror("bind error");exit(1);}//监听套接字if(listen(sfd, 5) == -1){perror("listen error");exit(1);}struct pollfd fdarr[4];fdarr[0].fd = sfd;fdarr[0].events = POLLIN;for(int i = 1; i < 4; ++i){fdarr[i].fd = -1;}int maxfd = sfd;int confd;int i = 1;while(1){int flag = poll(fdarr, maxfd + 1, INFTIM);if(flag == -1){perror("poll error");exit(1);}if(fdarr[0].revents & POLLIN)//监听套接字可读{confd = accept(sfd, NULL, NULL);for(i = 1; i < 4; ++i){if(fdarr[i].fd == -1){fdarr[i].fd = confd;fdarr[i].events = POLLIN;break;}}if(i == 4){perror("too many client");exit(1);}if(fdarr[i].fd > maxfd){maxfd = fdarr[i].fd;}}for(i = 1; i < 4; ++i){if(fdarr[i].fd == -1){continue;}if(fdarr[i].revents & (POLLIN | POLLERR)){int readn;char buf[10];memset(buf, 0, 10);if((readn = read(fdarr[i].fd, buf, 10)) < 0){if(errno == ECONNRESET){close(fdarr[i].fd);fdarr[i].fd = -1;}else{perror("read error");}}else if(readn == 0){close(fdarr[i].fd);fdarr[i].fd = -1;}else{printf("%s\n", buf);}}}}//关闭套接字close(sfd);return 0;}
client.cpp同上一篇select
poll与select区别在于文件描述符没有上限,select是1024个
0 0
- poll使用示例
- select poll epoll使用示例
- poll驱动程序示例
- poll 使用
- poll使用
- Linux应用编程基础之多路复用:select和poll的简单使用示例
- select poll使用
- poll()函数的使用
- poll()函数的使用
- modbus poll的使用
- poll()函数的使用
- select poll使用
- poll()函数的使用
- poll()函数的使用
- modbus poll的使用
- poll()函数的使用
- socket编程 及select poll epoll示例
- socket编程 及select poll epoll示例
- java中调用js脚本
- hibernate持久化对象状态
- GridView的一些特殊属性
- HTML转PDF+水印以及PDF+水印
- Android recovery 原理分析
- poll使用示例
- 超屌CircleProgressBar
- MYSQL基础_聚合函数_分组和多表连接查询
- Ajax局部刷新
- 关于Android使用proguard进行代码混淆
- Html 中 <a>标签的target属性
- android pull 解析xml
- 重建二叉树
- Shell多线程操作及线程数控制实例