UNPv1第七章:套接口选项
2016-04-26 10:02
190 查看
1 getsockopt和setsockopt函数
这两个函数仅用于套接字:#include <sys/socket.h> int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen); int setsockopt(int sockfd, int level, int optname, const void *optval socklen_t optlen); //均返回:若成功为0,出错为-1
其中sockfd必须指向一个打开套接字描述符
level(级别)指定系统中解释选项的代码或为通用套接字代码,或为某个特定于协议的代码
optval是一个指向某个变量(optval)的指针,setsockopt从*optval中取得选项待设置的新值,getsockopt则把已获取的选项当前值存放到*optval,*optval的大小由最后一个参数optlen指定,它对于setsockopt是一个值参数,对于getsockopt是一个值-结果参数*
调用getsockopt函数时,*optval是一个整数,*optval中返回的值为0,表示相应选项被禁止,不为0表示相应项被启用,类似地,setsockopt函数需要一个不为0的*optval值里启用选项,一个为0的*optval值来禁止选项。
2 fcntl函数(file control函数)
函数fcntl提供了下列关于网络编程特性:(1)非阻塞I/O。通过使用F_SETFL命令设置O_NONBLOCK文件状态标志,我们可以把一个套接字设置为非阻塞型
(2)信号驱动I/O。通过使用F_SETFL命令设置O_ASYNC文件状态标志,我们可以把一个套接字设置成一旦其状态发生变化,内核就产生一个SIGIO信号
#include <fcntl.h> int fcntl(int fd, int cmd, ... /* int arg */ ); //返回:若成功取决于cmd,出错-1
每种描述符(包括套接字描述符)都有一组由F_GETFL命令获取或F_SETFL命令设置的文件标志。其中影响套接字描述符的两个标志是:
O_NONBLOCK——–非阻塞I/O
O_ASYNC————-信号驱动式I/O
使用fcntl开启(关闭)非阻塞I/O的典型代码
int flags; /* Set a socket as nonblocking */ if ( (flags = fcntl (fd, F_GETFL, 0)) < 0) err_sys("F_GETFL error"); flags |= O_NONBLOCK;//开启 flags |= ~O_NONBLOCK;//关闭 if (fcntl(fd, F_SETFL, flags) < 0) err_sys("F_SETFL error");
相关文章推荐
- Leetcode 55. Jump Game
- iOS应用程序状态图
- ssh能够连接而sftp不能连接的解决方法
- Java类中继承、接口实现的一些细节
- BZOJ2134: 单选错位
- Delphi 接口技术
- ListView和Adapter
- iOS 原生二维码的扫描详解(代码)
- 环状图chart.js
- robotframework笔记24
- 密码爆破脚本
- 我已经写了48年代码了,我感觉我还能写下去
- 如何优化C语言代码(程序员必读)
- System.Web.Caching.Cache类 缓存
- 关于zabbix运行期间的断点问题
- MFC界面库BCGControlBar新版功能详解四:示例和其他功能
- window下使用命令行创建symfony项目
- okhttp是android平台最好的网络库
- cobar实现mysql分片及分片集之内双节点之间的高可用
- Redis 下载