第7章 套接口选项

获取和设置影响套接口的选项:
1. 函数 getsockopt 和 setsockopt;
2. 函数 fcntl;
3. 函数 ioctl.

#include <sys/socket.h>
int getsockopt(int sockfd, int level, int optname, void *optval, scoklen_t *optlen);
int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t *optlen);

以上函数只能用于套接口。
返回: OK -> 0, Error -> -1
sockfd: 指向一个已打开的套接口描述字。
level: (级别)指定系统中解释选项的代码,即普通套接口代码或特定于协议的代码(例如: IPv4,IPv6 或 TCP)。
Optval: 指向变量的指针,通过它,或由 setsockopt 取得选项的新值,或由 getsockopt 存储选项的当前值。 对于函数 getsockopt,optval是一个值, 对于函数 setsockopt, optval 是一个值-结果参数。
optlen: 指向存放参数 optval 大小值的变量。

两种基本类型的套接口选项:
1. 打开或关闭某个特性的二进制选项(标志);
2. 取得并返回我们可以设置或检查的特定值的选项(值)。

以下选项由TCP已连接套接口从监听套接口继承:
    SO_DEBUG, SO_DONTROUTE, SO_KEEPALIVE, SO_LINGER, SO_OOBINLINE, SO_RCVBUF, SO_SNDBU。

基本套接口选项
这些选项是协议无关的,也就是说,它们由内核中的协议无关代码处理,而不是诸如IPv4这样的一类特殊的协议模块处理,但有些选项仅能应用到某些确定类型的套接口中。例如 SO_BROADCAST 套接口选项称为 “基本选项”,它也仅应用于数据报套接口。
SO_BROADCAST 套接口选项: 使能或禁止进程发送广播消息的能力。
SO_DEBUG 套接口选项: 此选项仅由 TCP 支持,当一个TCP套接口打开此选项时,内核对TCP在此套接口所发送和接收的所有分组跟踪详细信息。这些信息保存在内核的环形缓冲区中,可由程序trpt来进行检查。
SO_DONTROUTE 套接口选项: 规定发出的分组将旁路底层协议的正常路由机制。
SO_ERROR 套接口选项
SO_KEEPALIVE 套接口选项: 给一个TCP套接口设置保持存活(keepalive) 选项后,如果 2 小时内在此套接口的任一方向都没有数据交换,TCP就自动给对方一个保持存活探测分节 (keepalive probe)。

fcntl 函数
fcntl 代表 "file control(文件控制)",此函数进行各种描述字控制操作。
#include <fcntl.h>
int fcntl(int fd, int cmd, ... /* int arg */);
返回: OK -> 依赖语参数 cmd, Error -> -1.

转载于:https://www.cnblogs.com/learne/archive/2009/08/12/1544668.html

猜你喜欢

转载自blog.csdn.net/weixin_33872566/article/details/93228117