锐英源精品开源心得,转载请注明:“锐英源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_多路复用相关推荐

  1. Linux应用(四)socket网络编程

    文章目录 一 简略了解网络 1 三种socket 1.1 SOCK_STREAM 1.2 SOCK_DGRAM 1.3 SOCK_RAW 2 面向连接和无连接 2.1 面向连接 2.2 无连接 3 网 ...

  2. linux 协议栈之socket,Linux协议栈之BSD和INET socket层(一)

    Linux的BSD和INET  socket层分别对应于ISO的表示层和会话层,其中有两个比较重要的数据结构: struct socket { socket_statestate; unsigned ...

  3. linux C语言 socket编程教程(附两个例子)(socket教程)

    文章目录 1.网络中进程之间如何通信? 2.什么是Socket? 3.socket的基本操作 3.1.socket()函数 3.2.bind()函数 网络字节序与主机字节序 3.3.listen(). ...

  4. Linux下的socket演示程序

    和C语言教程一样,我们从一个简单的"Hello World!"程序切入 socket 编程. 本节演示了 Linux 下的代码,server.cpp 是服务器端代码,client. ...

  5. linux进去网卡,Linux上使用socket进行网卡抓包

    Linux下使用socket进行网卡抓包 有时候需要自己编写代码进行抓包,以找出特殊意义的包. 下面是简单的一个示例: #include #include #include #include #inc ...

  6. linux中高并发socket最大连接数的优化详解

    这篇文章主要给大家介绍了关于linux中高并发socket最大连接数优化的相关资料,文中介绍的很详细,相信对大家具有一定的参考价值,需要的朋友们下面来一起学习学习吧. 首先我们可以通过ulimit – ...

  7. Linux网络编程 | Socket编程(一):Socket的介绍、UDPSocket的封装、UDP服务器/客户端的实现

    目录 套接字编程 Sockaddr结构 字节序 地址转换 常用套接字接口 UDP的通信流程 UDPSocket的封装 UDP服务器 UDP客户端 套接字编程 所谓套接字(Socket),就是对网络中不 ...

  8. linux 非阻塞 socket - Google 搜索

    linux 非阻塞 socket - Google 搜索 linux c实现超时.非阻塞socket的函数select - Yunlu Liu (刘云璐) sites.google.com/site/ ...

  9. linux套接字端口,多端口监听套接字linux(multiport listening socket linux)

    多端口监听套接字linux(multiport listening socket linux) 我正在用C(linux)编写一个多线程服务器应用程序,它必须监听2个不同的端口号,例如监听端口号3000 ...

  10. Linux中查看socket进程状态

    Linux中查看socket进程状态 Linux中查看socket状态: cat /proc/net/sockstat #(这个是ipv4的) sockets: used 137 TCP: inuse ...

最新文章

  1. Android Studio修改.gradle文件路径
  2. python3之协程(4)---gevent实现协程操作
  3. 18行代码解决:(C语言)L1-046 整除光棍 (20分)
  4. build文件_把编译时间加入到目标文件
  5. Python list 和 tuple 使用小记
  6. 20165232 缓冲区溢出漏洞实验
  7. Java中用JS那些_java web中javascript主要用哪些?
  8. Windows MinGW配置C、C++编译环境
  9. vue github开源项目_2018 年最好的 45 个 Vue 开源项目汇总
  10. 什么是DBA[WHAT'S MEANING OF DBA]
  11. 恢复云数据库MySQL的备份文件到自建数据库
  12. CCS12.0 安装并设置中文
  13. github中文件夹名带数字,git下来为空文件夹
  14. Python爬虫系列之爬取美团美食板块商家数据,选困的福利
  15. gh-ost学习笔记 试验代码学习
  16. linux无线网卡ucod文件,基于Linux的无线网卡驱动程序
  17. Shell的解释和一些用法
  18. 古董万年历升级WiFi授时 STM32+ESP8266
  19. 解决dubbo问题:forbid consumer
  20. linux nvcc未找到命令,NVCC CUDA编译流程

热门文章

  1. 移动端调取摄像头上面如何给出框_智能AI助力家居安防,创维小湃高清智能摄像头...
  2. python语法训练_18-04-17回顾: python3语法+刻意训练
  3. python软件下载3版本-【python3下载】python3下载安装 中文版-七喜软件园
  4. python练手经典100例-10 个最值得 Python 新人练手的有趣项目
  5. python怎么读发音百度翻译-用python实现百度翻译的示例代码
  6. 语音识别kaldi该如何学习?
  7. 资源 | 横向对比5大开源语音识别工具包,CMU Sphinx最佳
  8. FFmpeg的H.264解码器源代码简单分析:宏块解码(Decode)部分-帧内宏块(Intra)
  9. mysql进程线程_MySQL 内核线程简要分析
  10. 虚拟linux无线网卡驱动安装失败,救命1 :Atheros AR5212无线网卡驱动安装失败!!...