- 浏览: 140267 次
文章分类
最新评论
下面几种方法可用来获取和设置影响套接字的选项:
(1)getsockopt 和 setsockopt 函数;
(2)fcntl 函数;
(3)ioctl 函数。
本文将介绍 getsockopt 和 setsockopt 函数,对 fcntl 的介绍见fcntl 函数介绍,而对 ioctl 的介绍则留到后面。
其中参数 sockfd 指向一个打开的套接字描述符,level 指定系统中解释选项的代码或为通用套接字代码,或为某个特定于协议的代码(如 IPv4、IPv6、TCP 或 SCTP)。optval 是一个指向某个变量的指针,setsockopt 从 *optval 处取得选项 optname 待设置的新值,getsockopt 则把已获取的选项 optname 的当前值存放到 *optval 中。*optval 的大小由 optlen 参数指定。
套接字选项粗分为两大基本类型:一是启用或禁止某个特性的二元选项(称为标志选项),二是取得并返回可以设置或检查的特定值的选项(称为值选项)。下面的两张表汇总了可由 getsockopt 和 setsockopt 获取和设置的选项。其中的“数据类型”列给出了指针 optval 必须指向的每个选项的数据类型(这一列中后跟一对花括号的记法表示一个结构,如 linger{} 就表示 struct linger),标有“标志”的列指出一个选项是否为标志选项,当 *optval 的值是 0 时表示选项被禁止,反之则表示开启。如果“标志”列不含有“·”,那么相应选项用于在用户进程与系统之间传递所指定数据类型的值。
其中的这几个套接字选项是由 TCP 已连接套接字从监听套接字继承的:SO_DEBUG、SO_DONTROUTE、SO_KEEPALIVE、SO_LINGER、SO_OOBINLINE、SO_RCVBUF、SO_RCVLOWAT、SO_SNDBUF、SO_SNDLOWAT、TCP_MAXSEG 和 TCP_NODELAY。这对 TCP 是很重要的,因为 accept 一直要到 TCP 层完成三路握手后才会给服务器返回已连接套接字。如果想在三路握手完成时确保这些套接字选项中的某一个是给已连接套接字设置的,那么必须先给监听套接字设置该选项。
(1)getsockopt 和 setsockopt 函数;
(2)fcntl 函数;
(3)ioctl 函数。
本文将介绍 getsockopt 和 setsockopt 函数,对 fcntl 的介绍见fcntl 函数介绍,而对 ioctl 的介绍则留到后面。
#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 指定系统中解释选项的代码或为通用套接字代码,或为某个特定于协议的代码(如 IPv4、IPv6、TCP 或 SCTP)。optval 是一个指向某个变量的指针,setsockopt 从 *optval 处取得选项 optname 待设置的新值,getsockopt 则把已获取的选项 optname 的当前值存放到 *optval 中。*optval 的大小由 optlen 参数指定。
套接字选项粗分为两大基本类型:一是启用或禁止某个特性的二元选项(称为标志选项),二是取得并返回可以设置或检查的特定值的选项(称为值选项)。下面的两张表汇总了可由 getsockopt 和 setsockopt 获取和设置的选项。其中的“数据类型”列给出了指针 optval 必须指向的每个选项的数据类型(这一列中后跟一对花括号的记法表示一个结构,如 linger{} 就表示 struct linger),标有“标志”的列指出一个选项是否为标志选项,当 *optval 的值是 0 时表示选项被禁止,反之则表示开启。如果“标志”列不含有“·”,那么相应选项用于在用户进程与系统之间传递所指定数据类型的值。
其中的这几个套接字选项是由 TCP 已连接套接字从监听套接字继承的:SO_DEBUG、SO_DONTROUTE、SO_KEEPALIVE、SO_LINGER、SO_OOBINLINE、SO_RCVBUF、SO_RCVLOWAT、SO_SNDBUF、SO_SNDLOWAT、TCP_MAXSEG 和 TCP_NODELAY。这对 TCP 是很重要的,因为 accept 一直要到 TCP 层完成三路握手后才会给服务器返回已连接套接字。如果想在三路握手完成时确保这些套接字选项中的某一个是给已连接套接字设置的,那么必须先给监听套接字设置该选项。
发表评论
-
Unix 域套接字与描述符的传递
2019-03-27 23:59 709在Unix 域套接字概述一节中介绍了什么是 U ... -
Unix 域套接字概述
2019-03-12 22:48 975Unix 域协议并不是一个实际的协议族,而是在 ... -
kqueue 接口
2019-03-06 00:47 683kqueue 接口是 ... -
辅助数据
2019-02-28 00:40 684辅助数据(a ... -
recv/send 和 recvmsg/sendmsg 函数
2019-01-22 00:40 1535recv 和 send ... -
inetd 守护进程介绍
2019-01-09 21:51 1045在 4.3 BSD 系统之前,很多网络服务都是 ... -
主机名与 IP 地址的转换(续)
2018-12-25 00:37 953在主机名与 IP 地址的转换一节中提到的 ge ... -
主机名与 IP 地址的转换
2018-11-14 00:20 2298在网络编程中,尽管大部分情况下操作的都是 IP ... -
SCTP 事件通知
2018-02-08 03:49 973SCTP 提供了多种可用的通知,用户可经由这些通知追踪 ... -
SCTP 套接字选项
2018-02-04 09:35 1682在获取和设置套接 ... -
SCTP 套接字编程基础函数
2018-02-04 10:08 1048SCTP 服务器可以使 ... -
SCTP 套接字编程基础概念
2018-01-18 00:10 559SCTP 套接字分为一到一套接字和一到多套接字。提供一 ... -
UDP套接字编程基础
2018-01-14 10:37 570下图显示了使用 UDP 套接字编写客户/服务器程序时的 ... -
通用套接字选项
2018-01-02 00:46 545在获取和设置套接 ... -
I/O 复用之 poll 函数
2017-12-27 00:20 421poll 函数提供的功能与 select 类似,不过在 ... -
I/O 复用之select 函数
2017-12-12 00:32 514select 函数允许进 ... -
Unix 5 种 IO 模型概述
2017-11-19 01:44 304Unix 下有 5 种可用 ... -
套接字创建、连接和关闭函数
2017-08-13 17:16 661下图是一对 TCP 客户与服务器进程之间发生的一些典型 ... -
字节转换和填充函数
2017-08-06 01:09 426网络编程中,为保证发送协议栈和接收协议栈就如 32 位 ... -
IPv4 和 IPv6 的套接字地址结构
2017-08-01 21:03 735大多数套接字函数 ...
相关推荐
tornado-6.4.1-cp38-abi3-musllinux_1_2_i686.whl
tornado-6.1-cp36-cp36m-manylinux2014_aarch64.whl
基于java的ssm停车位短租系统程序答辩PPT.pptx
tornado-6.4b1-cp38-abi3-musllinux_1_1_x86_64.whl
基于java的招生管理系统答辩PPT.pptx
本压缩包资源说明,你现在往下拉可以看到压缩包内容目录 我是批量上传的基于SpringBoot+Vue的项目,所以描述都一样;有源码有数据库脚本,系统都是测试过可运行的,看文件名即可区分项目~ |Java|SpringBoot|Vue|前后端分离| 开发语言:Java 框架:SpringBoot,Vue JDK版本:JDK1.8 数据库:MySQL 5.7+(推荐5.7,8.0也可以) 数据库工具:Navicat 开发软件: idea/eclipse(推荐idea) Maven包:Maven3.3.9+ 系统环境:Windows/Mac
基于java的农机电招平台答辩PPT.pptx
jdk23 甲骨文官方安装包
基于java的机场网上订票系统答辩PPT.pptx
项目经过测试均可完美运行! 环境说明: 开发语言:java jdk:jdk1.8 数据库:mysql 5.7+ 数据库工具:Navicat11+ 管理工具:maven 开发工具:idea/eclipse
基于java的网上书店销售管理系统答辩PPT.pptx
tornado-6.3.3-cp38-abi3-win32.whl
【作品名称】:基于 Jsp+Sqlserver 实现的超市信息管理系统 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: 系统功能: (1)系统分两种身份:管理员和员工,选择不同的身份进入不同的功能操作界面! (2)商品信息管理:管理员可以添加和维护商品信息,员工只能对商品信息进行查询 (3)员工信息管理:管理员登陆系统后可以可以添加和维护超市员工(收银员)的信息 (4)商品进货管理:管理员登陆系统后可以添加商品进货信息,可以对商品进货信息进行查询和统计,添加商品进进货退货信息,对商品进货退货信息进行查询和统计 (5)商品销售管理:员工(收银员)登陆系统后可以对商品进行销售,可以按时间查询自己的销售业绩;管理员登陆系统后可以按照时间等条件对销售信息进行查询,可以根据小票号登记顾客退货信息,查询顾客退货信息,可以查看员 【资源声明】:本资源作为“参考资料”而不是“定制需求”,代码只能作为参考,不能完全复制照搬。需要有一定的基础看懂代码,自行调试代码并解决报错,能自行添加功能修改代码。
tornado-6.3.2-cp38-abi3-musllinux_1_1_i686.whl
基于java的热带水果商城答辩PPT.pptx
java awt、Swing实现中国象棋可联机版本采用面向对象思想 采用面向对象的思路,实现中国象棋可联机版本,适合初学者,以及对面向对象有更深层次理解的开发者或者同学。 使用原生的java awt、Swing进行窗口式开发 将素材文件夹放在D:\Game路径下 两个工程直接导入Eclipse,即可运行, ps:一个工程运行两次也可以,需要注意端口号,代码默认如果连接的端口号是3003,则监听3004端口,相反同理。联机前需要确保两台计算机同时处于局域网或外网
web前端设计与开发(详细整理)(包含html讲解,css讲解,移动web讲解),合适学习前端的人员进行基础学习,一秒变高手
分析所需的数据和代码都在这里
Listening Exercise 3 Part 2.mp3
链表 删除链表中的重复元素,链表基础