c语言 ioctl,ioctl() fcntl() setsockopt() ioctlsocket() 用法
int ioctl(int d, int request, ...); 后续是否有参数根据第二个参数request的需要来决定。
ioctl用于硬件设备I/O通道控制,控制命令与参数都与设备高度相关,通常也与系统高度相关。
int fcntl(int fd, int cmd, ... /* arg */ );后续是否有参数根据第二个参数cmd的需要来决定。这点两者相同。
操作控制的对象是: 文件描述符。
ioctl()是底层的系统调用(system call),所以跨平台特性不好。
而fcntl则是被封装的函数,各个OS都是支持的。
在网络socket中,他们作用大概相似。
例如都可以设置socket的是否允许非阻塞模式,不过设置方式上略有不同:
int socketfd = .....;
fcntl(sockfd, F_SETFL,fcntl(sockfd, F_GETFL, 0) |O_NONBLOCK);
ioctl(sockfd, FIONBIO,1); 1:非阻塞0:阻塞
int setsockopt(int sockfd, int level, int optname, void *optval,socklen_t *optlen);
设置套接字选项.只能操作套接字。
sockfd: 套接字
level: 协议层 SOL_SOCKET/IPPROTO_IP/IPPRO_TCP
optname: 选项名 每一个协议层都有其固定的选项名
optval: 缓冲区 set是指向将要存放的地址, get是指向目前存放信息的地址
optlen: 缓冲区大小长度
在socket层常用操作有:
SO_BROADCAST 允许发送广播数据 int
SO_DEBUG 允许调试 int
SO_DONTROUTE 不查找路由 int
SO_ERROR 获得套接字错误 int
SO_KEEPALIVE 保持连接 int
SO_LINGER 延迟关闭连接 structlinger
SO_OOBINLINE 带外数据放入正常数据流 int
SO_RCVBUF 接收缓冲区大小 int
SO_SNDBUF 发送缓冲区大小 int
SO_RCVLOWAT 接收缓冲区下限 int
SO_SNDLOWAT 发送缓冲区下限 int
SO_RCVTIMEO 接收超时 structtimeval
SO_SNDTIMEO 发送超时 structtimeval
SO_REUSERADDR 允许重用本地地址和端口 int
SO_TYPE 获得套接字类型 int
SO_BSDCOMPAT 与BSD系统兼容 int
使用 SO_RECVBUF 和 SO_SENDBUF可以改变缺省缓冲区大小
例:
//设置接收缓冲区大小
intn_recvbuf = 32 * 1024;
setsockopt(sockfd, SOL_SOCKET,SO_RECVBUF, (const char*)&n_recvbuf,sizeof(int));
//设置发送缓冲区大小
intn_sendbuf = 32 * 1024;
setsockopt(sockfd, SOL_SOCKDET,SO_SENDBUF, (const char*)&n_sendbuf,sizeof(int));
使用SO_REUSERADDR:
1.当有一个有相同本地地址和端口的socket1处于TIME_WAIT状态时,而你启动的程序的socket2要占用该地址和端口,你的程 序就要用到该选项。
2.SO_RESUERADDR允许同一port上启动同一服务器的多个实例(多个进程),但每个实例绑定的IP地址是不能相同的。
3.SO_RESUERADDR允许单个进程绑定相同的端口到多个socket上,但每个socket绑定的ip地址不同。
4.SO_RESUERADDR允许完全相同的地址和端口的重复绑定,但这只用于UDP的多播,不用于TCP。
setsockopt()只是针对socket设置参数,是在连接中的参数控制,在OS层级的控制则由ioctl和fcntl控制。如果要是获取socket参数则使用getsockopt.
---------------------
作者:Richard__Lee
来源:CSDN
原文:https://blog.csdn.net/td_sexandzen/article/details/53785835
版权声明:本文为博主原创文章,转载请附上博文链接!
c语言 ioctl,ioctl() fcntl() setsockopt() ioctlsocket() 用法相关推荐
- Linux的ioctl和fcntl
Linux的ioctl和fcntl 1. 一切都是文件 在Linux中一切设备都当作文件,也就是说一切设备都抽象成一个文件,能够提取出来一些共同的特征.文件的一些最常用的操作,如打开.读取.写入等,L ...
- python语言入门n-python语言入门之字符串的一些用法
本篇教程探讨了python语言入门之字符串的一些用法,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入. < 一.字符串的拼接: a="123' b="ab ...
- C语言删掉无关变量无输出,C语言变量类型与输出控制用法实例教程
本文实例讲述了C语言变量类型与输出控制用法,有助于读者很好的对其进行总结与归纳.该实例分享给大家供大家参考借鉴之用.具体如下: 完整实例代码如下: /************************* ...
- channelinactive触发后不关闭channel_Go语言 | goroutine不只有基础的用法,还有这些你不知道的操作...
今天是golang专题第15篇文章,我们来继续聊聊channel的使用. 在我们的上篇文章当中我们简单介绍了golang当中channel的使用方法,channel是golang当中一个非常重要的设计 ...
- java case用法_Go语言 | goroutine不只有基础的用法,还有这些你不知道的操作
今天是golang专题第15篇文章,我们来继续聊聊channel的使用. 在我们的上篇文章当中我们简单介绍了golang当中channel的使用方法,channel是golang当中一个非常重要的设计 ...
- c语言数据类型int的用法,C语言基本数据类型:整型(int)用法详解|C语言学习
C语言基本数据类型:整型(int)用法详解 1. 整型 int C 语言提供了很多整数类型(整型),这些整型的区别在于它们的取值范围的大小,以及是否可以为负.int 是整型之一,一般被称为整型.以后, ...
- getsockopt/setsockopt函数用法【转】
来自:https://blog.csdn.net/legendox/article/details/4595492 功能描述: 获取或者设置 与某个套接字关联的选 项.选项可能存在于多 ...
- 对C语言的关键字及部分关键字用法的简单理解
小盆友,你是否有很多问号??? C语言的关键字是什么?有哪些?他们如何用??? 我也在学习中迷惑着,所以把今天学习到的稍微做一下总结,方便自己以后的复习(目前学到的比较粗浅,以后还需要深入学习). 哪 ...
- C语言,变长数组的用法
在我的<C语言,结构体成员的地址>文章中,定义了一个demo_node结构体,其中用到变长数组char addr[0].本文以此为例,对C语言变长数组的基本用法展开介绍. #pragm ...
最新文章
- mysql-innodb 日志机制分析----写在死锁前面
- 数组拷贝问题的解决方法
- Android之自定义控件显示点赞用户并通过用户名称进入该用户主页的功能
- 计算机英语基础性考任务三,(2021更新)国家开放大学电大《计算机应用基础》形考任务3作业3试题及答案...
- 【LeetCode从零单排】No.8 String to Integer (丧心病狂的一道题)
- 6.Java中的变量(定义)和数据类型(划分)
- 我的2020(年终总结)
- java 盘符 系统_001-Java再回首开篇-入门基础
- java中的action是指什么_Struts2【开发Action】知识要点
- SSH 连接、远程上传下载文件
- Spring Cloud(Greenwich版)-03-编写高可用Eureka Server(集群)
- Ubuntu 下搭建 Android 开发环境(图文)
- WinForm转WPF
- Excel 哪个版本的好用?
- 按键精灵一个命令学会这么厉害
- 方舟手游机服务器修改,方舟生存进化私服怎么设置 方舟手游私服设置教程
- 手把手带你学习Odoo OWL组件开发(1):认识 OWL
- 10个全网最具创意的聊天机器人:漫威和联合国儿童基金会都在尝试使用聊天机器人
- clamped b_spline
- 科技感十足五款APP软件,让你的手机不再低调!
热门文章
- Android系统架构开篇(深度好文,值得收藏,kotlin线程安全
- m版本 android,chiccam手机版下载-chiccam安卓版下载v4.2 最新版-西西软件下载
- 串口调试助手读写三菱fx3u数据_用电脑通过串口(RS485)给三菱PLC(FX3U)发指令,怎样在梯形图里写接收串口数据的程序?...
- Matlab Robotics project 1 phase 1 <Experiment Recording>
- C#第七回:DialogResult
- js html转为图片格式,Js实现将html页面或div生成图片
- 医疗行业大数据分析有哪些应用
- 重新安装mac 自带的apachectl_AirMail 可能是Mac上最好用的邮箱客户端
- 如果看了此文你还不懂傅里叶变换,那就过来掐死我吧【完整版】 - 博客 - 伯乐在线...
- Android Stdio 控制STM32开发板