欢迎来到天天文库
浏览记录
ID:41158922
大小:278.51 KB
页数:49页
时间:2019-08-17
《《套接字选项》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第12章套接字选项本章对套接字配置的获取或者设置进行介绍,通过对本章的学习将能够掌握基本的套接字属性配置方法。主要包含三个方面套接字选项、ioctl函数与套接字有关的请求命令、fcntl与套接字有关的请求命令。套接字选项介绍如下方面的知识:如何使用函数setsockopt()和函数getsockopt()。SOL_SOCKET级别套接字选项介绍。IPPTOTO_IP级别套接字选项介绍。IPPROTO_TCP级别套接字选项介绍。介绍几个进行使用套接字选项的例子。12.1获取和设置套接字选项getsocketopt()/sets
2、ocketopt()在进行网络编程的时候,经常需要查看或者设置套接字的某些特性,例如设置地址复用、读写数据的超时时间、对读缓冲区的大小进行调整等等操作。获得套接字选项设置情况的函数是getsockopt(),设置套接字选项的函数为setsockopt()。12.1.1函数getsockopt()和setsocketopt()介绍函数getsockopt()和函数setsockopt()的原型如下:#include#includeintgetsockopt(ints,int
3、level,intoptname,void*optval,socklen_t*optlen);intsetsockopt(ints,intlevel,intoptname,constvoid*optval,socklen_toptlen);函数getsockopt()和函数setsockopt()的用来获取或者设置与某个套接字关联的选项。选项可能存在于多层协议中,它们总会出现在最上面的套接字层。当对套接字选项进行操作时,必须给出选项所处的层和选项的名称。为了操作套接字层的选项,应该将层的值指定为SOL_SOCKET。为了操作
4、其它层的选项,必须给出控制选项的协议类型号。例如,为了表示一个选项由TCP协议解析,层应该设定为协议号TCP。12.1.2套接字选项按照参数选项级别level值的不同,套接字选项大致可以分为3类。通用套接字选项:IP选项:TCP选项:12.1.3套接字选项简单示例12.1.2小节中介绍了套接字的选项,本小节介绍如何使用这些套接字选项进行程序设计。下面的例子显示本系统中可能支持的套接字选项的状态,在一个程序中获得系统所支持的套接字选项的默认值,并将结果打印出来。1.定义选项所用的通用数据结构2.数据类型的定义3.列举的套接字选
5、项4.显示查询结果disp_outcome()5.主函数main()6.代码的编译执行12.2SOL_SOCKET协议族选项SOL_SOCKET级别的套接字选项是通用类型的套接字选项,这个选项中可以命令字比较多,例如有SO_BROADCAST、SO_KEEPALIVE、SO_LINGE、SO_OOBINLINE、SO_RCVBUFF、SO_SNDBUFF等命令字对套接字的基本特性进行控制。12.2.1SO_BROADCAST广播选项这个选项用于进行广播设置,默认情况下系统的广播是禁止的,因为很容易误用广播的功能造成网络灾难。
6、为了避免偶尔的失误造成意外,默认情况下套接口禁用了广播。如果确实需要使用广播功能,需要用户打开此功能。广播使用UDP套接字,其含义是允许将数据发送到子网网络的每个主机上。此项选项的输入数据参数是一个整型变量。当输入的值为0时,表示禁止广播,其他值表示允许广播。12.2.2SO_DEBUG调试选项SO_DEBUG调试选项表示允许调试套接字,此选项仅支持TCP,当打开此选项时,Linux内核程序跟踪在此套接字上的发送和接收的数据,并将调试信息放到一个环形缓冲区中。12.2.3SO_DONTROUTE不经过路由选项这个选项的设置使
7、发出的数据分组不经过正常的路由机制。分组将按照发送数据的目的地址和子网掩码,选择一个合适的网络接口进行发送,而不用经过路由机制。如果不能有选定的网络接口确定,则会返回ENETUNREACH错误。选项设置后,网络数据不通过网关发送,只能发送给直接连接的主机或者用一个子网内的主机。可以通过将send()函数的选项设置中加上MSG_DONTROUTE标志来实现相同的效果。选项的值是布尔型整数的标识。这个选项可以在两个网卡的的局域网内使用,系统根据发送的目的IP地址,自动匹配合适的子网,例如将子网A的数据发送到网络接口B上。12.2
8、.4SO_ERROR错误选项这个选项用来获得套接字错误,此套接字选项仅能够获取而不能进行设置。在Linux内核中的处理过程如下:(1)当套接字发生错误的时候,兼容BSD的网络协议将内核中的变量so_error设置为形如UNIX_Exxx的值。(2)内核通过两种方式通知用户进程:(3)进程在
此文档下载收益归作者所有