int
PASCAL
setsockopt
( __inSOCKETs,
/*
套接字
*/
__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状态的地址绑定到一起
Chapter 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)
|
数据
|
<!--[if !supportMisalignedColumns]-->
| | | | | | <!--[endif]-->
表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
( __inSOCKETs,
/*
套接字
*/
__in
DWORD
dwIoControlCode
,
/*
预定义的标志
*/
__in_bcount_opt
(cbInBuffer) LPVOIDlpvInBuffer,
/*
指向传递进入的值
*/
__in
DWORD
cbInBuffer
,
/*
传入
数据的多少
*/
__out_bcount_part_opt
(cbOutBuffer, *lpcbBytesReturned) LPVOIDlpvOutBuffer,
/*
返回信息缓冲区
*/
__in
DWORD
cbOutBuffer
,
/*
缓冲区的字节长度
*/
__out
LPDWORD
lpcbBytesReturned
,
/*
实际返回的字节数
*/
__in_opt
LPWSAOVERLAPPED
lpOverlapped
,
/*
重叠
I/O
*/
__in_opt
LPWSAOVERLAPPED_COMPLETION_ROUTINE
lpCompletionRoutine
);
/*
重叠
I/O
回调函数
*/
|
int
PASCALFAR
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
|