欢迎来到天天文库
浏览记录
ID:46300108
大小:142.50 KB
页数:43页
时间:2019-11-22
《第19章+套接口选项》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第19章套接口选项第19章套接口选项19.1套接口选项19.1.1SOL_SOCKET19.1.2IPPROTO_IP19.2广播19.2.1报文的发送19.2.2广播报文的接收19.3多播19.3.1一个简单的多播库19.3.2接收多播数据19.3.3发送多播数据19.4原始套接口编程19.4.1Ping程序19.4.2WinSniffer程序19.1套接口选项有两种套接口的选项:一种是布尔型选项,允许或禁止一种特性;另一种是整形或结构选项。允许一个布尔型选项,则将optval指向非零整形数;禁
2、止一个选项optval指向一个等于零的整形数。对于布尔型选项,optlen应等于sizeof(int);对其他选项,optval指向包含所需选项的整形数或结构,而optlen则为整形数或结构的长度。19.1套接口选项(setsockopt)简述:设置套接口的选项。#includeintsetsockopt(SOCKETs,intlevel,intoptname,constcharFAR*optval,intoptlen);s:标识一个套接口的描述字。level:选项定义的层次;目
3、前仅支持SOL_SOCKET和IPPROTO_TCP层次。optname:需设置的选项。optval:指针,指向存放选项值的缓冲区。optlen:optval缓冲区的长度。19.1套接口选项(setsockopt)注释:setsockopt()函数用于任意类型、任意状态套接口的设置选项值。尽管在不同协议层上存在选项,但本函数仅定义了最高的“套接口”层次上的选项。选项影响套接口的操作,诸如加急数据是否在普通数据流中接收,广播数据是否可以从套接口发送等等。19.1套接口选项(setsockopt)sets
4、ockopt()支持下列选项。其中“类型”表明optval所指数据的类型。选项类型意义SO_BROADCASTBOOL允许套接口传送广播信息SO_DEBUGBOOL记录调试信息SO_DONTLINERBOOL不要因为数据未发送就阻塞关闭操作。设置本选项相当于将SO_LINGER的l_onoff元素置为零SO_DONTROUTEBOOL禁止选径;直接传送SO_KEEPALIVEBOOL发送“保持活动”包SO_LINGERstructlingerFAR*如关闭时有未发送数据,则逗留SO_OOBINLINE
5、BOOL在常规数据流中接收带外数据SO_RCVBUFInt为接收确定缓冲区大小SO_REUSEADDRBOOL允许套接口和一个已在使用中的地址捆绑SO_SNDBUFInt指定发送缓冲区大小TCP_NODELAYBOOL禁止发送合并的Nagle算法19.1套接口选项(setsockopt)返回值:若无错误发生,setsockopt()返回0。否则的话,返回SOCKET_ERROR错误,应用程序可通过WSAGetLastError()获取相应错误代码。19.1套接口选项(setsockopt)错误代码:W
6、SANOTINITIALISED:在使用此API之前应首先成功地调用WSAStartup()。WSAENETDOWN:WINDOWS套接口实现检测到网络子系统失效。WSAEFAULT:optval不是进程地址空间中的一个有效部分。WSAEINPROGRESS:一个阻塞的WINDOWS套接口调用正在运行中。WSAEINVAL:level值非法,或optval中的信息非法。WSAENETRESET:当SO_KEEPALIVE设置后连接超时。WSAENOPROTOOPT:未知或不支持选项。19.1套接口选项
7、(getsockopt)简述:获取一个套接口选项。#includeintgetsockopt(SOCKETs,intlevel,intoptname,charFAR*optval,intFAR*optlen);s:一个标识套接口的描述字。level:选项定义的层次。支持的层次仅有SOL_SOCKET和IPPROTO_TCP。optname:需获取的套接口选项。optval:指针,指向存放所获得选项值的缓冲区。optlen:指针,指向optval缓冲区的长度值。19.1套接口选项(
8、getsockopt)注释:getsockopt()函数用于获取任意类型、任意状态套接口的选项当前值,并把结果存入optval。在不同协议层上存在选项,但往往是在最高的“套接口”层次上,设置选项影响套接口的操作,诸如操作的阻塞与否、包的选径方式、带外数据的传送等。被选中选项的值放在optval缓冲区中。optlen所指向的整形数在初始时包含缓冲区的长度,在调用返回时被置为实际值的长度。如果未进行setsockopt()调用,则getsockopt()返回
此文档下载收益归作者所有