Unix网络编程学习笔记——Select函数的返回条件
来源:互联网 发布:老薛主机 知乎 编辑:程序博客网 时间:2024/05/21 12:46
int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,struct timeval *timeout);
在select函数的定义中,中间三个参数用于指定我们需要内核帮助测试是否可读、可写和异常条件的描述字。
那么描述字在哪些情况下才会被认为准备好呢?
下面四个条件任何一个满足的时候套件字准备好读:
1. 套接口接受缓冲区的数据字节数大于等于套接口接受缓冲区的低潮限度当前值。对这样的套接口读操作将不阻塞并返回一个大于0的值(既准备好读入的数据量)。我们可以用套接口选项SO_RCVLOWAT来设置此低潮限度,对于TCP和UDP套接口,其缺省值为1。
2. 连接的读这一半关闭(也就是接收了FIN的TCP连接)。对这样的套接口读操作将不阻塞并返回0(记文件结束符)。
3. 套接口是一个监听的套接口且已完成的连接数为非0。正常情况下这样的套接口上的accpet不会被阻塞。
4. 有一个套接口错误待处理。对这样的套接口操作将不阻塞并返回一个错误-1,errno设置成明确的错误条件。
一下三个条件的任何一个满足时,套接口准备好写操作:
1. 套接口发送缓冲区中可用空间的字节数大于等于套接口发送缓冲区低潮限度的当前值,且或者(i)套接口已连接,或者(ii)套接口不需要连接(例如UDP套接字)。这意味着,如果我们将这样的套接口设置为非阻塞,写操作将不阻塞且返回一个正值(例如由传输层传入的字节数)。我们可以用套接口选项SO_SNDLOWAT来设置此低潮限度,对于TCP和UDP套接口其缺省值为2048.
2. 连接的写这一半关闭,对这样的套接口写操作将产生信号SIGPIPE。
3. 有一个套接口错误待处理。对这样的套接口操作写操作将不阻塞且返回一个错误-1,errno设置成明确的错误条件。这些待处理的错误也可通过指定套接口选项SO_ERROR调用getsockopt来取得并清除。
如果一个套接口存在带外数据或者仍处于带外标记,那他有异常条件待处理。
小结如下:
- Unix网络编程学习笔记——Select函数的返回条件
- UNIX网络编程——select函数的并发限制和 poll 函数应用举例
- UNIX网络编程——select函数的并发限制和 poll 函数应用举例
- UNIX网络编程——select函数的并发限制和 poll 函数应用举例
- Unix网络编程学习笔记之第6章 I/O复用:select和poll函数
- select和poll函数《UNIX网络编程卷一》笔记
- UNIX网络编程——使用select函数的TCP和UDP回射服务器程序
- UNIX网络编程——epoll 系列函数简介、与select、poll 的区别
- 【Unix 网络编程】服务器网络编程模型——I/O复用:select 函数
- UNIX网络编程学习(13)--使用select的str_cli函数的实现
- UNIX网络编程学习(14)--使用select正确处理EOF的str_cli函数修订版
- UNIX网络编程学习(14)--使用select正确处理EOF的str_cli函数修订版
- Unix 网络编程 select 与 epool 函数的区别
- 《unix网络编程》(13)select、shutdown函数
- UNIX网络编程笔记(10)—高级IO函数
- Unix网络编程学习笔记——close与shutdown
- Unix网络编程学习笔记
- UNIX网络编程学习笔记
- CentOS 6.4 Openstack Havana 多节点安装(OVS+GRE)swfit+cinder LVM
- C语言关于++--的问题
- PHP超级全局变量总结
- Roundabout不规则列表效果展示,类似旋转木马效果
- android开发教程(五)——java之包
- Unix网络编程学习笔记——Select函数的返回条件
- 从恒大亚冠夺冠夜看恒大营销
- 优先队列使用基础
- ARM架构kprobe应用及实现分析(6.0 导出堆栈的值)
- 冒泡排序——优化
- ORACLE实现字段自增
- 设计一个计算器类Claculator,它只有一个用于计数的数据成员count。该计算器的有效计数范围是0~65535,实现计数器的前自增、后自增、前自减、后自减、两个计算器相加减运算
- 《编程珠玑(第2版)》笔记——将一个n元一维向量向左旋转i个位置(第2章)
- BLE 包结构及传输速率