Unix网络编程之套接口选项
2016-05-05 23:58
211 查看
在Unix网络编程中,有非常多的套接口选项(虽然其中大多数并不常见),如下表所示:
套接口层和IP层的套接口选项汇总:
传输层的套接口选项汇总:
套接口选项分为两大基本类型:一是开启或禁止某个特性的二元选项(称为标志选项),二是取得并返回我们可以设置或检查的特定值的选项(称为值选项)。在标志栏下有“ √ ”,说明这是一个标志选项,用于开启或关系某个功能;当这些标志选项调用getsockopt函数时,*optval是一个整数。*optval中返回值为0表示相应选项被禁止,不为0表示相应选项被开启。而setsockopt则通过不为0的*optval值来开启某个功能,一个为0的*optval值来关闭某个功能。
下面介绍两个跟选项有关的函数:
#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);
参数说明:
sockfd:指向一个打开的套接口描述字(该套接口必须打开)
level:指定系统中解释选项的代码
optname:选项名
optval:是一个变量指针,getsockopt将返回的值存入该指针指向的空间,setsockopt则通过该指针获得参数
optlen:用于指定*optval的大小,注意两个函数之间参数的区别,getsockopt中是一个指针,而在setsockopt中是一个普通变量,所以在使用之前应该先定义变量,然后指向该变量。
参考代码:
//include 各头文件
int main( )
{
int sockfd;
int optval = 0;
int optlen = 4;
sockfd = socket ( AF_INET, SOCK_STREAM, 0 ); //打开一个套接口
getsockopt ( sockfd, SOL_SOCKET, SO_RCVBUF, &optval, &optlen ); //用来获取接收缓冲区的大小参数
printf (" the buff size is %d\n", optval); //打印的结果与操作系统的默认值有关
optval = 100000;
setsockopt ( sockfd, SOL_SOCKET, SO_RCVBUF, &optval, optlen );
getsockopt ( sockfd, SOL_SOCKET, SO_RCVBUF, &optval, &optlen );
printf (" the buff size is %d\n", optval); //打印出来的是100000
}
通过setsockopt函数设置指定的参数以后,可以改变系统的默认值,注意在调用getsockopt函数时,最后一个参数指向的值要与optval的大小相匹配,如上例中,如果optlen为0,那么getsockopt返回的optval的值也是0,没有任何意义。
套接口层和IP层的套接口选项汇总:
传输层的套接口选项汇总:
套接口选项分为两大基本类型:一是开启或禁止某个特性的二元选项(称为标志选项),二是取得并返回我们可以设置或检查的特定值的选项(称为值选项)。在标志栏下有“ √ ”,说明这是一个标志选项,用于开启或关系某个功能;当这些标志选项调用getsockopt函数时,*optval是一个整数。*optval中返回值为0表示相应选项被禁止,不为0表示相应选项被开启。而setsockopt则通过不为0的*optval值来开启某个功能,一个为0的*optval值来关闭某个功能。
下面介绍两个跟选项有关的函数:
#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);
参数说明:
sockfd:指向一个打开的套接口描述字(该套接口必须打开)
level:指定系统中解释选项的代码
optname:选项名
optval:是一个变量指针,getsockopt将返回的值存入该指针指向的空间,setsockopt则通过该指针获得参数
optlen:用于指定*optval的大小,注意两个函数之间参数的区别,getsockopt中是一个指针,而在setsockopt中是一个普通变量,所以在使用之前应该先定义变量,然后指向该变量。
参考代码:
//include 各头文件
int main( )
{
int sockfd;
int optval = 0;
int optlen = 4;
sockfd = socket ( AF_INET, SOCK_STREAM, 0 ); //打开一个套接口
getsockopt ( sockfd, SOL_SOCKET, SO_RCVBUF, &optval, &optlen ); //用来获取接收缓冲区的大小参数
printf (" the buff size is %d\n", optval); //打印的结果与操作系统的默认值有关
optval = 100000;
setsockopt ( sockfd, SOL_SOCKET, SO_RCVBUF, &optval, optlen );
getsockopt ( sockfd, SOL_SOCKET, SO_RCVBUF, &optval, &optlen );
printf (" the buff size is %d\n", optval); //打印出来的是100000
}
通过setsockopt函数设置指定的参数以后,可以改变系统的默认值,注意在调用getsockopt函数时,最后一个参数指向的值要与optval的大小相匹配,如上例中,如果optlen为0,那么getsockopt返回的optval的值也是0,没有任何意义。
相关文章推荐
- 多个生产者与多个消费者的问题
- UNP学习记录---三次握手和四次挥手
- UNP---套接字简介
- 接收到的数据,发出的数据,ip地址(Fit fot iOS,OS X)
- unix网络编程1 基础知识
- unix网络编程2 读写函数介绍
- UNP v1 第一章:简介
- libnet入门
- Unix网络编程之常见的数据结构
- 第5章 TCP服务器-客服端程序例子
- 第3章 套接口编程简介
- 第3章 套接口编程简介
- 【Unix 网络编程】服务器网络编程模型——I/O复用:select 函数
- TCP连接的建立和终止过程
- Unix网络编程之环境搭建
- Unix网络编程之基本TCP套接字编程
- unix网络编程学习心得(1)——未完成连接、已完成连接队列
- UNIX网路编程(第三版) 关于源代码的使用问题
- Unix网络编程第三版源码编译
- Unix网络编程 高级IO套接字设置超时