前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >UNPv1第七章:套接口选项

UNPv1第七章:套接口选项

作者头像
提莫队长
发布2019-02-21 10:40:05
3830
发布2019-02-21 10:40:05
举报
文章被收录于专栏:刘晓杰刘晓杰

1 getsockopt和setsockopt函数

这两个函数仅用于套接字:

代码语言:javascript
复制
#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信号

代码语言:javascript
复制
#include <fcntl.h>
int fcntl(int fd, int cmd, ... /* int arg */ );
//返回:若成功取决于cmd,出错-1

每种描述符(包括套接字描述符)都有一组由F_GETFL命令获取或F_SETFL命令设置的文件标志。其中影响套接字描述符的两个标志是:

  1. O_NONBLOCK——–非阻塞I/O
  2. O_ASYNC————-信号驱动式I/O

使用fcntl开启(关闭)非阻塞I/O的典型代码

代码语言:javascript
复制
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");
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年04月26日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 getsockopt和setsockopt函数
  • 2 fcntl函数(file control函数)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档