CAsyncSocket::GetSockOpt

BOOL GetSockOpt( int nOptionName, void* lpOptionValue, int* lpOptionLen, int nLevel = SOL_SOCKET );

返回值:
函数调用成功时返回非零值,否则为0,可以调用函数GetLastError获得特定的错误代码。如果没有用SetSockOpt设置选项,则GetSockOpt返回选项的缺省值。此成员函数可用的错误代码有:
·WSANOTINITIALISED在调用此API函数之前应该成功地调用了AfxSocketInit。
·WSAENETDOWNWindows Sockets检测到网络子系统故障。
·WSAEFAULT参数lpOptionLen无效。
·WSAEINPROGRESS正在进行Windows Sockets块操作。
·WSAENOPROTOOPT系统不支持该选项。例如,SOCK_STREAM类型的套接字不支持SO_BROADCAST选项,SOCK_DGRAM类型的套接字不支持SO_ACCEPTCONN,SO_DONTLINGER,SO_KEEPALIVE,SO_LINGER和SO_OOBINLINE选项。
·WSAENOTSOCK描述符不是一个套接字。

参数:
nOptionName待检索的套接字选项名。
lpOptionValue指向存放套接字选项的返回值的缓冲区的指针。函数返回时,套接字选项的值存放在lpOptionValue所指的缓冲中。调用时,参数lpOptionLen存放缓冲区的大小(字节数),函数返回时,把它置成实际返回的字节数。对选项SO_LINGER来说,返回的是LINGER结构的大小;对于其它选项,返回的是BOOL值或int值的长度。请参阅后面“说明”部分选项和返回值大小的列表。
lpOptionLen指向lpOptionValue缓冲的大小(以字节为单位)的指针。
nLevel选项所定义的级别,支持的级别有:SOL_SOCKET和IPPROTO_TCP。

说明:
本成员函数用于检索套接字选项的值。GetSockOpt可以查询任意类型和状态的套接字的选项的当前值,结果保存在lpOptionValue中。选项影响套接字操作,例如包的传输路由、带外数据(out-of-band data)的数据传输等。
GetSockOpt支持以下的套接字选项。下表中的类型列说明了pOptionValue中数据的类型。TCP_NODELAY选项用于IPPROTO_TCP这一级别,其它选项用于SOL_SOCKET级别。
类型含义
SO_ACCEPTCONNBOOL套接字正在监听
SO_BROADCASTBOOL套接字被配置成广播消息方式
SO_DEBUGBOOL允许调试
SO_DONTLINGERBOOL如果为真,选项SO_LINGER被禁止
SO_DONTROUTEBOOL路由被禁止
SO_ERRORint返回并清除错误状态
SO_KEEPALIVEBOOL正在发送“保持活动”
SO_LINGERstruct LINGER返回当前的延时选项
SO_OOBINLINEBOOL在正常数据流中收到了带外数据
SO_RCVBUFint接收缓冲区的大小
SO_REUSEADDRBOOL套接字可以绑定到已经在使用的地址
SO_SNDBUFint发送缓冲区的大小
SO_TYPEint套接字的类型(如SOCK_STREAM)
TCP_NODELAYBOOL禁止发送合并数据的Nagle算法

GetSockOpt不支持的Berkeley 软件分布(BSD)选项有:
类型含义
SO_RCVLOWATint接收最低水准标志
SO_RCVTIMEOint接收超时消息
SO_SNDLOWATint发送最低水准标志
SO_SNDTIMEOint发送超时消息
IP_OPTIONSint获取IP头的选项
TCP_MAXSEGint获取TCP段的最大尺寸

调用GetSockOpt时,如果参数中出现了系统不支持的选项,将会产生错误。调用GetLastError可以得到错误代码WSAENOPROTOOPT。

请参阅:CAsyncSocket::SetSockOpt