套接字操作 -- fcntl

2015-01-11 20:51:59   最后更新: 2015-01-11 20:51:59   访问数量:841




fcntl 函数可执行各种描述符控制操作

ioctl 函数则对 io 操作定义了各种控制

fcntl、ioctl 和路由套接字操作小结
操作fcntlioctl路由套接字POSIX规定首选方案
设置套接字为非阻塞IO型F_SETFL, O_NONBLOCKFIONBIO fcntl
设置套接字为信号驱动IO型F_SETFL, O_ASYNCFIOASYNC fcntl
设置套接字属主F_SETOWNFIOCSPGRP 或 FIOSETOWN fcntl
获取套接字属主F_GETOWNFIOCGPGRP 或 FIOGETOWN fcntl
获取套接字接收缓冲区中的字节数 FIONREAD  
测试套接字是否处于带外标志 SIOCATMARK sockatmark
获取接口列表 SIOCGIFCONFsysctl 
接口操作 SIOC[GS]IFxxx  
ARP高速缓存操作 SIOCxARPRTM_xxx 
路由表操作 SIOCxxxRTRTM_xxx 

这里我们主要讨论 fcntl

int fcntl(int fd, int cmd, ... /* arg */);

 

定义于 fcntl.h 中

调用成功的返回值取决于 cmd,调用失败返回 -1

 

主要提供以下功能:

非阻塞式 IO

通过 F_SETFL 命令设置 O_NONBLOCK 文件状态标志,我们可以把一个套接字设置为非阻塞型,我们后面专门进行讨论

信号驱动式 IO

通过 F_SETFL 命令设置 O_ASYNC 文件状态标志,我们可以把一个套接字设置为信号驱动型

一旦其状态发生变化,内核就会产生一个 SIGIO 信号,具体我们后面专门进行讨论

设置属主

F_SETOWN 允许我们指定用于接收 SIGIO 和 SIGURG 信号的套接字属主(进程ID或进程组ID)

SIGIO 信号是套接字被设置为信号驱动式 IO 后产生的

SIGURG 信号是在新的带外数据到达套接字时产生的

F_GETOWN 命令返回套接字当前属主,SIGIO 和 SIGURG 只会在 F_SETOWN 命令设置属主后才会产生

 






读书笔记      技术帖      linux      unix      c语言      unp      unix网络编程      socket      龙潭书斋      套接字      fcntl      ioctl     


京ICP备15018585号