setsockopt() ioctlsocket() sol_socket 详解

原文地址:http://blog.chinaunix.net/uid-20743151-id-326443.html

SOL_SOCKET、IPPROTO_IP、IPPROTO_TCP和NSPROTO_IPX选项级别

int PASCAL setsockopt ( __in SOCKET s,/*套接字*/
__in int level, /*选项级别*/
__in int optname,/* 选项级别*/
__in const char * optval,/* 目标选项的值*/
__in int optlen );/* 目标选项的值*/
int PASCAL getsockopt( __in SOCKET s, /*套接字*/
__in int level, /*选项级别*/
__in int optname, /* 选项级别*/
__out char* optval, /* 返回目标选项的值*/
__inout int * optlen); /* 返回目标选项的值*/
SOL_SOCKET选项级别
选项值类型
获取/设置
Socket版本
说明
SO_ACCEPTCONN
布尔值
只能获取
1+
如为TRUE(真) ,表明套接字处于监听模式 Chapter 9 Page 1
SO_BROADCAST
布尔值
两种均可
1+
如TRUE,表明套接字已配置成对广播消息进行发送 Chapter 9 Page 2~3
SO_CONNECT_TIME
整数
只能获取
1+
返回套接字建立连接的时间,以秒为单位,如尚未连接,返回0xffffffff  (微软专用)
Chapter 9 Page 3
SO_DEBUG
布尔值
两者均可
1+
如果TRUE,就允许调试输出 (W32不支持) Chapter 9 Page 3
SO_DONTLINGER
布尔值
两者均可
1+
如果是TRUE,则禁用SO_LINGER Chapter 9 Page 3
SO_LINGER
struct linger
两者均可
1+
设置或获取当前的拖延值 Chapter 9 Page 5~6
SO_DONTROUTE
布尔值
两者均可
1+
如果TRUE,便直接向网络接口发送消息,毋需查询路由表 (微软无效) Chapter 9 Page 4
SO_ERROR
布尔值
只能获得
1+
返回错误状态 Chapter 9 Page 4
SO_EXCLUSIVEADDRUSE
布尔值
两者均可
2+
如果TRUE,套接字绑定那个本地端口就不能重新被另一个进程使用 Chapter 9 Page 4~5
SO_KEEPALIVE
布尔值
两者均可
1+
如果TRUE,套接字就会进行配置,在会话过程中发送”保持活动”消息 Chapter 9 Page 5
SO_MAX_MSG_SIZE
无符号整数
只能获取
2+
对一个面向消息的套接字来说,一条消息的最大长度 Chapter 9 Page 6
SO_OOBINLINE
布尔值
两者均可
1+
如果是TRUE,带外数据就会在普通数据流中返回 (W32不支持) Chapter 9 Page 6
SO_PROTOCOL_INFO
WSAPROTOCOL_INFO
只能获得
2+
套接字绑定的那种协议的特征 Chapter 9 Page 7
SO_RCVBUF
整数
两者均可
1+
面向接收操作,为每个套接字分别获取或设置缓冲区长度 Chapter 9 Page 7
SO_REUSEADDR
布尔值
两者均可
1+
如果是TRUE,套接字就可与一个正由其他套接字使用的地址绑定到一起,或与处在T IME_WAIT状态的地址绑定到一起C hapter 9 Page 7~8
SO_SNDBUF
布尔值
两者均可
1+
设置分配给套接字的数据发送缓冲区的大小  Chapter 9 Page 8
SO_TYPE
整数
只能获取
1+
返回指定套接字的类型(如SOCK_DGRAM和SOCK_STREAM等等) Chapter 9 Page 8
SO_SNDTIMEO
整数
两者均可
1+
获取或设置套接字上的数据发送超时时间(以毫秒为单位) Chapter 9 Page 8
SO_RCVTIMEO
整数
两者均可
1+
获取或设置与套接字上数据接收对应的超时时间值(以毫秒为单位)
Chapter 9 Page 9
SO_UPDATE_ACCEPT_CONTEXT
SOCKET
两者均可
1+
更新SOCKET状态 Chapter 9 Page 9
IPPROTO_IP选项级别
选项值类型
获取/设置
Socket版本
说明
IP_OPTIONS
char[]
两者均可
1+
设置或获取I P头内的I P选项  Chapter 9 Page 16~17
IP_HDRINCL
布尔值
两者均可
2+
如果是TRUE,IP头就会随即将发送的数据一起提交,并从读取的数据中返回,如下表
Chapter 9 Page 18
表IP_HDRINCL:                                                                                                              Chapter 9 Page 18
4位版本
(ipv4 or ipv6)
4位头长度
(32位字一共有多少个)
8位服务类型
(参阅IP_TOS)
16位总长
(以字节为单位, ip头和数据共长)
16位标识
(对发出的每个ip包进行“唯一性”标定, 每发出一个数据包,系统都会递增这个值)
3个1位标志 (仅在I P包需要分割为较小的包时才会用到)
13位分段偏移 (仅在ip包需要分割为较小的包时才会用到)
8位存在时间
(参阅IP_TTL)
8位协议类型
(用于对进入的数据包组装,如:TCP, IDP, IGMP和ICMP等等)
16位头检验和
(校验和是指对整个I P头进行1 6位1的求余总和结果, 不针对实际的数据)
32位源IP地址
32位目标IP地址
IP选项(如果有的话,详见IP_OPTIONS)
数据
           
表IP_HDRINCL
IP_TOS
整数
两者均可
1+
IP服务类型 Chapter 9 Page 19
IP_TTL
整数
两者均可
1+
I P协议的“存在时间” (TTL)参数 Chapter 9 Page 19
IP_MULTICAST_IF
无符号长整数
两者均可
1+
获取或设置打算从它上面发出多播数据的本地接口  Chapter 9 Page 20
IP_MULTICAST_TTL
整数
两者均可
1+
为套接字获取或设置多播数据包的存在时间 Chapter 9 Page 20
IP_MULTICAST_LOOP
布尔值
两者均可
1+
如果TRUE,发至多播地址的数据将原封不动地“反射”或“反弹”回套接字的进入缓冲区 Chapter 9 Page 20
IP_ADD_MEMBERSHIP
struct ip_mreq
只能设置
1+
在指定的I P组内为套接字赋予成员资格  Chapter 9 Page 20
IP_DROP_MEMBERSHIP
struct ip_mre1
只能设置
1+
将套接字从指定的I P组内删去(撤消成员资格) Chapter 9 Page 20
IP_DONTFRAGMENT
布尔值
两者均可
1+
如果是TRUE,就不对I P数据报进行分段 Chapter 9 Page 20
IPPROTO_TCP选项级别
选项值类型
获取/设置
Socket版本
说明
TCP_NODELAY
布尔值
两者均可
1+
若为TRUE, 就会在套接字上禁用Nagle算法 (只适用于流式套接字) Chapter 9 Page 21
NSPROTO_IPX选项级别
选项值类型
获取/设置
Socket版本
说明 (仅适用于Microsoft IPX/SPX)
IPX_PTYPE
整数
两者均可
1+
获取或设置I P X包的类型 Chapter 9 Page 21
IPX_FILTERPTYP
整数
两者均可
1+
获取或设置准备过滤的IPX包之类型 Chapter 9 Page 22
IPX_STOPFILTERPTYPE
整数
只能设置
1+
删除为指定IPX包设置的过滤器 Chapter 9 Page 22
IPX_DSTYPE
整数
两者均可
1+
获取或设置SPX头中的数据流字段值 Chapter 9 Page 22
IPX_EXTENDED_ADDRESS
布尔值
两者均可
1+
如果是TRUE,便允许对I P X包进行扩展定址 Chapter 9 Page 22
IPX_RECVHDR
布尔值
两者均可
1+
如果是T R U E,就随接收调用一起,返回IPX头 Chapter 9 Page 22
IPX_MAXSIZE
整数
只能获取
1+
返回I P X数据报的最大长度 Chapter 9 Page 22
IPX_ADDRESS
IPX_ADDRESS_DATA
只能获取
1+
返回具备I P X能力之适配器的有关信息 Chapter 9 Page 22
IPX_GETNETINFO
IPX_NETNUM_DATA
只能获取
1+
返回与一个指定I P X网络编号有关的信息 Chapter 9 Page 23
IPX_GETNETINFO_NORIP
IPX_ADDRESS_DATA
两者均可
1+
返回与一个指定I P X网络编号有关的信息 Chapter 9 Page 23
IPX_SPXGETCONNECTIONSTATUS
IPX_SPXCONNSTATUS_
DATA
只能获取
1+
返回与一个已建立连接的S P X套接字有关的信息 Chapter 9 Page 23
IPX_ADDRESS_NOTIFY
IPX_ADDRESS_DATA
只能获取
1+
若I P X适配器的状态发生改变,则发出异步通知  Chapter 9 Page 24
IPX_MAX_ADAPTER_NUM
整数
只能获取
1+
返回存在的IPX适配器个数 Chapter 9 Page 24~25
IPX_RERIPNETNUMBER
IPX_NETNUM_DATA
只能获取
1+
返回一个网络编号的相关信息 Chapter 9 Page 25
IPX_RECEIVE_BROADCAST
布尔值
只能设置
1+
如果是TRUE,就不接收IPX广播包 Chapter 9 Page 25
PX_IMMEDIATESPXZCK
布尔值
两者均可
1+
如果是TRUE,就不在SPX连接上延迟发送ACK Chapter 9 Page 25~26
int WSAAPI WSAIoctl(   __in SOCKET s, /*套接字*/
                           __in DWORD dwIoControlCode, /*预定义的标志*/
                           __in_bcount_opt(cbInBuffer) LPVOID lpvInBuffer, /*指向传递进入的值*/
                           __in DWORD cbInBuffer, /*传入数据的多少*/
                           __out_bcount_part_opt(cbOutBuffer, *lpcbBytesReturned) LPVOID lpvOutBuffer, /*返回信息缓冲区*/
                           __in DWORD cbOutBuffer, /*缓冲区的字节长度*/
                           __out LPDWORD lpcbBytesReturned, /*实际返回的字节数*/
                           __in_opt LPWSAOVERLAPPED lpOverlapped, /*重叠I/O */
                           __in_opt LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine); /*重叠I/O回调函数*/
int PASCAL FAR ioctlsocket( __in SOCKET s, /*套接字*/
                                   __in long cmd, /*预定义的标志*/
                                   __inout u_long FAR *argp); /*命令参数*/
IO控制命令
函数
输入
输出
Socket版本
说明
标准I/O控制命令
FIONBIO
ioctlsocket/WSAIoct
无符号长整数
1+
将套接字置入非锁定模式, 而若设为0值,意味着套接字进入锁定模式
Chapter 9 Page 26
FIONREAD
两者均可
无符号长整数
1+
返回在套接字上存在的数据量 Chapter 9 Page 26
SIOCATMARK
两者均可
布尔值
1+
判断是否已读取了带外数据 Chapter 9 Page 26~27
其他I/O控制命令
SIO_ENABLE_CIRCULAR-QUEUEING
WSAIoct
布尔值
布尔值
2+
如接收缓冲区队列溢出,则首先丢弃最早收到的消息
Chapter 9 Page 27
SIO_FIND_ROUTE
WSAIoct
SOCKADDR
布尔值
2+
验证到指定地址的路由是否存在(W32不支持)
Chapter 9 Page 27
SIO_FLUSH
WSAIoct
2+
判断是否已读取OOB数据 Chapter 9 Page 27
SIO_BROADCAST_ADDRESS
WSAIoct
SOCKADDR
2+
为套接字地址家族返回一个广播地址 Chapter 9 Page 28
SIO_GET_EXTENSION_FUNCTION_POINTER
WSAIoct
GUID
函数指针
2+
取得基层提供者特有一个函数指针 Chapter 9 Page 28
SIO_CHK_QOS
WSAIoct
DWORD
DWORD
2+
为指定的套接字设置QOS属性 Chapter 9 Page 28
SIO_GET_QOS
WSAIoct
QOS
2+
返回与套接字关联在一起的QOS结构 Chapter 9 Page 29
SIO_SET_QOS
WSAIoct
QOS
2+
为指定套接字设置QOS属性 Chapter 9 Page 29
SIO_MULTIPOINT_LOOPBACK
WSAIoct
布尔值
布尔值
2+
设置或调查多播数据是否循环返回套接字 Chapter 9 Page 29
SIO_MULTICAST_SCOPE
WSAIoct
整数
整数
2+
设置或获取多播数据的存在时间值 Chapter 9 Page 29~30
SIO_KEEPLIVE_VALS
WSAIoct
tcp_keepalive
tcp_keepalive
2+
针对每一个连接,分别设置其TCP"保持活动”周期
Chapter 9 Page 30
SIO_RCVALL
WSAIoct
无符号整数
2+
接收网络上的所有数据包 Chapter 9 Page 30
SIO_RCVALL_MCAST
WSAIoct
无符号整数
2+
接收网络上的所有多播数据包 Chapter 9 Page 30
SIO_RCVALL_IGMPMCAST
WSAIoct
无符号整数
2+
接收网络上的所有IGMP数据包 Chapter 9 Page 31
SIO_ROUTING_INTERFACE_QUERY
两者均可
SOCKADDR
2+
可找到用来向远程机器发送数据的那个本地接口的地址
Chapter 9 Page 31
SIO_ROUTING_INTERFACE_CHANGE
WSAIoct
SOCKADDR
2+
与一个端点连接的接口发生改变后,发出通知
Chapter 9 Page 31
SIO_ADDRESS_LIST_QUERY
WSAIoct
SOCKET_ADDRESS_LIST
2+
返回套接字绑定的一系列接口的列表 Chapter 9 Page 32
SIO_ADDRESS_LIST_CHANGE
WSAIoct
2+
本地接口发生变化时,发出通知 Chapter 9 Page 32
IO_GET_INTERFACE_LIST
WSAIoct
INTERFCE_INFO[]
2+
返回本地接口列表 Chapter 9 Page 33
安全套接字层的I/O控制命令 (Windows 95/98、Windows NT以及Windows 2000 均不支持)
SO_SSL_GET_CAPABILITIES
WSAIoct
DWORD
1
返回Winsock安全提供者的功能,仅定义了SO_CAP_CLIENT标志 Chapter 9 Page 33
SO_SSL_GET_FLAGS
WSAIoct
DWORD
1
返回与套接字对应的s信道特有标志 Chapter 9 Page 34
SO_SSL_SET_FLAGS
WSAIoct
DWORD
1
设置套接字s信道特有标志 Chapter 9 Page 34
SO_SSL_GET_PROTOCOLS
WSAIoct
SSLPROTOCOLS
1
返回安全提供者支持的协议列表 Chapter 9 Page 34
SO_SSL_SET_PROTOCOLS
WSAIoct
SSLPROTOCOLS
1
设置基层提供者应当支持的一个协议列表 Chapter 9 Page 34
SO_SSL_SET_VALIDATE_CERT_HOOK
WSAIoct
SSLVALIDATECERTHOOK
1
为SSL身份凭据的接受设置校验函数 Chapter 9 Page 34
SO_SSL_PERFORM_HANDSHAKE
WSAIoct
1
在已建立连接的套接字上开始安全联络操作
Chapter 9 Page 35
ATM I/O控制命令
SIO_GET_NUMBER_OF_ATM_DEVICES
WSAIoct
DWORD
2+
返回ATM适配器的数量 Chapter 9 Page 35
SIO_GET_ATM_ADDRESS
WSAIoct
DWORD
ATM_ADDRESS
2+
为指定设备返回ATM地址 Chapter 9 Page 35
SIO_ASSOCIATE_PVC
WSAIoct
ATM_PVC_PARAMS
2+
将套接字与一个永久虚拟回路关联起来 Chapter 9 Page 35
SIO_GET_ATM_CONNECTION_ID
两者均可
ATM_CONNECTION_ID
2+
获取同套接字关联在一起的ATM连接ID Chapter 9 Page 36

你可能感兴趣的:(setsockopt() ioctlsocket() sol_socket 详解)