套接字的多种可选项

套接字具有多种特性,这些特性可通过可选项更改。本章将介绍更改套接字可选项的方法,并以此为基础进一步观擦套接字内部。
我们之前写的程序都是创建好套接字后(未经特别操作)直接使用,此时通过默认的套接字特征进行数据通信。之前的示例较为简单,无需特别操作套接字特性,但有时的确需要更改。

在这里插入图片描述
从表中可以看出,套接字可选项是分层的。IPPROTO_IP层可选项是IP协议相关事项,IPPROTO_TCP层可选项是TCP协议相关的事项,SOL_SOCKET层套接字相关的通用可选项。

也许有人看到表格会产生畏惧感,但现在无需全部背下来或理解,因此不必有负担。实际能够设置的可选项数量就是表的好几倍,也无需一下子理解所有可选项,实际工作中注意掌握即可。接触的可选项多了,自然会掌握大部分重要的。本书也只介绍其中一部分重要的可选项含义及更改方法。

getsockopt&setsockopt

我们几乎可以针对表中所有可选项进行读取(Get)和设置(Set)(当然,有些可选项只能进行一种操作)。可选项的读取和设置通过如下2个函数完成。

#include <sys/socket.h>
int getsockopt(int sock, int level, int optname, void *optval, 
              socklen_t *optlen);
/*
 * 成功时返回0, 失败时返回-1
 * sock 用于查看选项套接字文件描述符
 * level 要查看的可选项的协议层
 * optname 要勘察的可选项名
 * optval 保存查看结果的缓冲地址值
 * optlen 向第四个参数optval传递的缓冲大小。调用函数后,该变量中保存通过第四个参数返回的可选项信息的字节数
 */

上述函数用于读取套接字可选项,并不难。接下来介绍更改可选项时调用的函数。

#include <sys/socket.h>
int setsockopt(int sock, int level, int optname, const void *optval,
              socklen_t optlen);
/*
 * 成功时返回0,失败时返回-1
 * sock 用于更改可选项的套接字文件描述符
 * level 要更改的可选项协议层
 * optname 要更改的可选项名
 * optval 保存要更改的选项信息的缓冲地址值
 * optlen 向第四个参数optval传递的可选项信息的字节数
 */

SO_SNDBUF & SO_RCVBUF

前面介绍过,创建套接字将同时生成I/O缓冲。如果各位忘了这部分内容,可以复习第5章。接下来将介绍I/O缓冲相关可选项。

SO_RCVBUF是输入缓冲大小相关可选项,SO_SNDBUF是输出缓冲大小相关可选项。用这2个可选项既可以读取当前I/O缓冲大小,也可以进行更改。通过下列下列读取创建套接字时默认的I/O缓冲大小。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值