简述编辑本段回目录
获取一个套接口选项。
#include
intPASCALFARgetsockopt(SOCKETs,intlevel,intoptname,
charFAR*optval,intFAR*optlen);
s:一个标识套接口的描述字。
level:选项定义的层次。支持的层次仅有SOL_SOCKET和IPPROTO_TCP。
optname:需获取的套接口选项。
optval:指针,指向存放所获得选项值的缓冲区。
optlen:指针,指向optval缓冲区的长度值。
注释编辑本段回目录
getsockopt()函数用于获取任意类型、任意状态套接口的选项当前值,并把结果存入optval。在不同协议层上存在选项,但往往是在最高的“套接口”层次上,设置选项影响套接口的操作,诸如操作的阻塞与否、包的选径方式、带外数据的传送等。
被选中选项的值放在optval缓冲区中。optlen所指向的整形数在初始时包含缓冲区的长度,在调用返回时被置为实际值的长度。对SO_LINGER选项而言,相当于linger结构的大小,对其他选项来说,是一个整形数的大小。
如果未进行setsockopt()调用,则getsockopt()返回系统缺省值。
getsockopt()支持下列选项。其中“类型”栏指出了optval所指向的值。仅有TCP_NODELAY选项使用了IPPROTO_TCP层;其余选项均使用SOL_SOCKET层。
选项类型意义
SO_ACCEPTCONNBOOL套接口正在用listen()监听。
SO_BROADCASTBOOL套接口设置为传送广播信息。
SO_DEBUGBOOL允许调试。
SO_DONTLINERBOOL若为真,则SO_LINGER选项被禁止。
SO_DONTROUTEBOOL禁止选径。
SO_ERRORint获取错误状态并清除。
SO_KEEPALIVEBOOL发送“保持活动”信息。
SO_LINGERstructlingerFAR*返回当前各linger选项。
SO_OOBINLINEBOOL在普通数据流中接收带外数据。
SO_RCVBUFint接收缓冲区大小。
SO_REUSEADDRBOOL套接口能和一个已在使用中的地址捆绑。
SO_SNDBUFint发送缓冲区大小。
SO_TYPEint套接口类型(如SOCK_STREAM)。
TCP_NODELAYBOOL禁止发送合并的Nagle算法。
getsockopt()不支持的BSD选项有:
选项名类型意义
SO_RCVLOWATint接收低级水印。
SO_RCVTIMEOint接收超时。
SO_SNDLOWATint发送低级水印。
SO_SNDTIMEOint发送超时。
IP_OPTIONS获取IP头中选项。
TCP_MAXSEGint获取TCP最大段的长度。
用一个未被支持的选项去调用getsockopt()将会返回一个WSAENOPROTOOPT错误代码(可用WSAGetLastError()获取)。
返回值:
若无错误发生,getsockopt()返回0。否则的话,返回SOCKET_ERROR错误,应用程序可通过WSAGetLastError()获取相应错误代码。
错误代码:
WSANOTINITIALISED:在使用此API之前应首先成功地调用WSAStartup()。
WSAENETDOWN:WINDOWS套接口实现检测到网络子系统失效。
WSAEFAULT:optlen参数非法。
WSAEINPROGRESS:一个阻塞的WINDOWS套接口调用正在运行中。
WSAENOPROTOOPT:未知或不支持选项。其中,SOCK_STREAM类型的套接口不支持SO_BROADCAST选项,SOCK_DGRAM类型的套接口不支持SO_ACCEPTCONN、SO_DONTLINGER、SO_KEEPALIVE、SO_LINGER和SO_OOBINLINE选项。
WSAENOTSOCK:描述字不是一个套接口。
参见编辑本段回目录
setsockopt(),WSAAsyncSelect(),socket().