博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
unix-poll
阅读量:4326 次
发布时间:2019-06-06

本文共 1547 字,大约阅读时间需要 5 分钟。

poll的用法和select差不多,但是select的最大文件描述符是由FD_SETSIZE限制,若要改变,那么还得修改宏定义,重新编译内核,很麻烦,但是poll可以通过

ulimit -n xxx //修改文件描述符个数

poll使用链表保存文件描述符

poll和select的缺点是一样的,仍然要采用轮询的方式

看代码

//我们这里的客户端只建立连接,每建立一个连接count就加1;#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;int main(){ int count=0; while(1){ int sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd == -1) { perror("socket() err"); return -1; } struct sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(8888); addr.sin_addr.s_addr = inet_addr("127.0.0.1"); if (connect(sockfd, (struct sockaddr *)&addr, sizeof(addr)) == -1) { perror("socket() err"); return -1; } cout<<++count<
poll的客户端
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;void handler(int sig){ cout<
<
maxi) maxi=i; break; } } client[i].events=POLLIN;//将conn的事件也设为POLLIN if(--nready<=0) continue; } for(int i=1;i<=maxi;i++){ conn=client[i].fd; if(conn==-1) continue; if(client[i].events&POLLIN){ int rc = read(conn, recvbuf, sizeof(recvbuf));if (rc == 0){ cout<<"client has closed"<

接着分别在客户端终端窗口和服务器终端窗口输入

ulimit -n 2048

接着启动服务端和客户端

看一看到输出了2045,其中0,1,2已被标准输入输出和错误流占用

转载于:https://www.cnblogs.com/illfuckingkyzb/p/10152496.html

你可能感兴趣的文章
Django 学习笔记(五) --- Ajax 传输数据
查看>>
Spring boot 日志 Logback
查看>>
基于OWIN WebAPI 使用OAUTH2授权服务【授权码模式(Authorization Code)】
查看>>
[深入Maven源代码]maven绑定命令行参数到具体插件
查看>>
laravel 分页使用
查看>>
RobotFramework自动化2-自定义关键字
查看>>
centos6.4-x86-64系统更新系统自带Apache Http Server
查看>>
[置顶] 【cocos2d-x入门实战】微信飞机大战之三:飞机要起飞了
查看>>
BABOK - 需求分析(Requirements Analysis)概述
查看>>
第43条:掌握GCD及操作队列的使用时机
查看>>
Windows autoKeras的下载与安装连接
查看>>
CMU Bomblab 答案
查看>>
微信支付之异步通知签名错误
查看>>
2016 - 1 -17 GCD学习总结
查看>>
linux安装php-redis扩展(转)
查看>>
Vue集成微信开发趟坑:公众号以及JSSDK相关
查看>>
vue项目开发之v-for列表渲染的坑
查看>>
C# 输出流转化成输入流操作XML
查看>>
CSS外边距合并(塌陷/margin越界)
查看>>
Swift给每个开发者赢取500万的机会!不看一生后悔。
查看>>