linux+多路复用socket,socket的select_多路复用
锐英源精品开源心得,转载请注明:“锐英源www.wisestudy.cn,孙老师作品,电话13803810136。”需要全文内容也请联系孙老师。
select()函数面向多个文件描述符和或socket描述符工作,这样提供了多路复用和异步输入和输出功能。
在使用select()函数时,能够等待一个指定的时长,直到数据准备好来读写或有异常为止:
#include
#include
#include
int select(int n,fd_set *readfds,fd_set*writefds,fd_set*exceptfds,struct timeval *timeout);
struct timeval { long tv_sec,long tv_usec};
参数n指定有多少描述符要被检查,这个长度参数里的值要比最大文件描述符值 大1(因为描述符开始位置是0)。
Linux内核对这个长度有限制,限制额为1024,限制参数为__FD_SETSIZE=1024。如果想扩大这个长度,需要修改,再重新编译内核,编译时要确保libc的版本足够高能够处理。
参数readfds,writefds,exceptfds是描述符集的指针,描述符集存储在fd_set数据类型里,这类类型规定了监听内核给出的什么信号,对哪个描述符监听哪类动作。描述符集和以前的信号集类似,可以向集里加描述符或去描述符。
当一个描述符准备好读时,在读描述符集里会设置上对应的合适位置。当一个描述符准备好写时,在写描述符集里对应的合适位置会设置上。当socket遇到错误时,2个位都设置上。异常位会在带外数据接收到时设置上。
下面的宏是用来操作描述符集的:
FD_ZERO(fd_set*set);
清除集内所有位
FD_CLR(int fd,fd_set *set);
关闭fd对应的位
FD_SET(int fd,fd_set*set);
开启fd对应的位
FD_ISSET(int fd,fd_set*set);
检测fd对应的位是否设置上
参数timeval指定了select()函数需要等待的时间,等待过程直到状态位有变化时才结束(超时也会结束)。如果一个或多个描述符在超时前准备好了,函数就在哪个时间点返回。timeval里有秒成员和微秒成员。
linux+多路复用socket,socket的select_多路复用相关推荐
- Linux应用(四)socket网络编程
文章目录 一 简略了解网络 1 三种socket 1.1 SOCK_STREAM 1.2 SOCK_DGRAM 1.3 SOCK_RAW 2 面向连接和无连接 2.1 面向连接 2.2 无连接 3 网 ...
- linux 协议栈之socket,Linux协议栈之BSD和INET socket层(一)
Linux的BSD和INET socket层分别对应于ISO的表示层和会话层,其中有两个比较重要的数据结构: struct socket { socket_statestate; unsigned ...
- linux C语言 socket编程教程(附两个例子)(socket教程)
文章目录 1.网络中进程之间如何通信? 2.什么是Socket? 3.socket的基本操作 3.1.socket()函数 3.2.bind()函数 网络字节序与主机字节序 3.3.listen(). ...
- Linux下的socket演示程序
和C语言教程一样,我们从一个简单的"Hello World!"程序切入 socket 编程. 本节演示了 Linux 下的代码,server.cpp 是服务器端代码,client. ...
- linux进去网卡,Linux上使用socket进行网卡抓包
Linux下使用socket进行网卡抓包 有时候需要自己编写代码进行抓包,以找出特殊意义的包. 下面是简单的一个示例: #include #include #include #include #inc ...
- linux中高并发socket最大连接数的优化详解
这篇文章主要给大家介绍了关于linux中高并发socket最大连接数优化的相关资料,文中介绍的很详细,相信对大家具有一定的参考价值,需要的朋友们下面来一起学习学习吧. 首先我们可以通过ulimit – ...
- Linux网络编程 | Socket编程(一):Socket的介绍、UDPSocket的封装、UDP服务器/客户端的实现
目录 套接字编程 Sockaddr结构 字节序 地址转换 常用套接字接口 UDP的通信流程 UDPSocket的封装 UDP服务器 UDP客户端 套接字编程 所谓套接字(Socket),就是对网络中不 ...
- linux 非阻塞 socket - Google 搜索
linux 非阻塞 socket - Google 搜索 linux c实现超时.非阻塞socket的函数select - Yunlu Liu (刘云璐) sites.google.com/site/ ...
- linux套接字端口,多端口监听套接字linux(multiport listening socket linux)
多端口监听套接字linux(multiport listening socket linux) 我正在用C(linux)编写一个多线程服务器应用程序,它必须监听2个不同的端口号,例如监听端口号3000 ...
- Linux中查看socket进程状态
Linux中查看socket进程状态 Linux中查看socket状态: cat /proc/net/sockstat #(这个是ipv4的) sockets: used 137 TCP: inuse ...
最新文章
- Android Studio修改.gradle文件路径
- python3之协程(4)---gevent实现协程操作
- 18行代码解决:(C语言)L1-046 整除光棍 (20分)
- build文件_把编译时间加入到目标文件
- Python list 和 tuple 使用小记
- 20165232 缓冲区溢出漏洞实验
- Java中用JS那些_java web中javascript主要用哪些?
- Windows MinGW配置C、C++编译环境
- vue github开源项目_2018 年最好的 45 个 Vue 开源项目汇总
- 什么是DBA[WHAT'S MEANING OF DBA]
- 恢复云数据库MySQL的备份文件到自建数据库
- CCS12.0 安装并设置中文
- github中文件夹名带数字,git下来为空文件夹
- Python爬虫系列之爬取美团美食板块商家数据,选困的福利
- gh-ost学习笔记 试验代码学习
- linux无线网卡ucod文件,基于Linux的无线网卡驱动程序
- Shell的解释和一些用法
- 古董万年历升级WiFi授时 STM32+ESP8266
- 解决dubbo问题:forbid consumer
- linux nvcc未找到命令,NVCC CUDA编译流程
热门文章
- 移动端调取摄像头上面如何给出框_智能AI助力家居安防,创维小湃高清智能摄像头...
- python语法训练_18-04-17回顾: python3语法+刻意训练
- python软件下载3版本-【python3下载】python3下载安装 中文版-七喜软件园
- python练手经典100例-10 个最值得 Python 新人练手的有趣项目
- python怎么读发音百度翻译-用python实现百度翻译的示例代码
- 语音识别kaldi该如何学习?
- 资源 | 横向对比5大开源语音识别工具包,CMU Sphinx最佳
- FFmpeg的H.264解码器源代码简单分析:宏块解码(Decode)部分-帧内宏块(Intra)
- mysql进程线程_MySQL 内核线程简要分析
- 虚拟linux无线网卡驱动安装失败,救命1 :Atheros AR5212无线网卡驱动安装失败!!...