套接字选项
来源:互联网 发布:curl算法 编辑:程序博客网 时间:2024/04/30 23:43
getsocketopt
获得与给定套接字相关的相关信息。其定义如下:
int getsocketopt( SOCKET s, int level, int optname, char FAR* optval, int FAR* optlen);
s:其为一个给定的套接字,这个套接字必须有效
level:为一个选项级。
optname:为我们感兴趣的选项。
optval和optlen:为我们想获取返回的选项值。
setsocketopt
用于设置套接字选项。其定义如下:
int setsocketopt( SOCKET s, int level, int optname, char FAR* optval, int FAR* optlen);
其参数的意义和getsocketopt相同,但最后需要我们传递进去。
1.SOL_SOCKET选项级别
1)SO_ACCEPTCONN
optval参数:BOOL类型,只能获取;为TRUE,表示套接字处于监听模式。
注意:SOCK_DGRAM类型不支持该选项。
2)SO_BROADCAST
optval参数:BOOL类型,既可以获取也可以设置;为TRUE,表示套接字已配置为发送广播消息。
注意:对除了SOCK_STREAM类型外的所有套接字,这个选项都是有效的。
3)SO_CONDITIONAL_ACCEPT
optval参数:BOOL类型,既可以获取也可以设置;
注意:在默认情况下,这个选项针对TCP是关闭的,既使没有使用Accept、WSAAccept或AcceptEx函数,发送的SYN包都会返回ACK+SYN确认报文。如果打开这个选项,连接不会被确认,除非应用程序调用一个接收函数。这个选项必须在Listen调用之前设置。
4)SO_CONNECT_TIME
optval参数:BOOL类型,只能获取;返回套接字已建立的时间,以毫秒为单位。
注意:微软特有选项。
5)SO_DEBUG
optval参数:BOOL类型,既可以获取也可以设置;如果为TRUE,就可以调试输出。
注意:目前,无任何windows平台支持。
6)SO_DONTLINGER
optval参数:BOOL类型,既可以获取也可以设置;如果是TRUE,则禁用SO_LINGER。
注意:设置为SO_LINGER选项,会有一个等待时间,调用CloseSocket函数,会将等待时间用完或数据发完,就立即关闭套接字。
7)SO_DONTROUTE
optval参数:BOOL类型,既可以获取也可以设置;如果为TRUE,就不经过路由器的路由选择,直接向网络接口发送消息。
注意:默认情况下路由是启用的。在windows平台下调用这个选项总会成功。Microsoft提供程序总是忽这一请求,并总是通过路由表为外出数据确定一个适当的接口。
8)SO_ERROR
optval参数:BOOL类型,只能获取;用于返回错误代码。
注意:错误值不是总能够得到及时更新,因此有时会返回0,要注意。
9)SO_EXCLUSIVEADDRUSE
optval参数:BOOL类型,既可以获取也可以设置;如果为TRUE,套接字绑定的那个本地端口不能被另一个进程重新使用。
注意:这个选项是对SO_REUSEADDR的补充。禁止其他进程在一个地址上使用SO_REUSEADDR。
10)SO_KEEPLIVE
optval参数:BOOL类型,既可以获取也可以设置;如果为TRUE,套接字就会进行配置,并在会话过程中发送“保持活跃”消息。
11)SO_LINGER
optval参数:struct linger类型,既可以获取也可以设置;设置或获取当前的拖延值linger。
注意:SO_LINGER可以设置一个等待时间,在调用closesocket函数时,只有当等待时间用完或数据发完,就立即关闭套接字。其结构体如下:
struct linger{ u_short l_onoff;//为0,表示不允许设置拖延时间;非0值,表示允许设置拖延时间。 u_short l_linger;//以秒为单位的拖延时间。
};
说明:SO_LINGER选项对只对closesocket有效,对shutdown无效。对于closesocket:如果l_onoff为0,那么将是优雅关闭方式,如果缓冲区内有未发送完的数据,要将这些数据发送完后才关闭TCP连接;如果l_onoff为0,且l_linger也为0时,当缓冲区内有未发完的数据时,TCP会发出RST包重置连接,这样数据会丢失,这是强制关闭;如果l_onoff为0,且l_linger不为0时,此时如果缓冲区有未发送完的数据时,如果在时间内,将数据发送完成,那么将关闭TCP连接,如果在时间内为未发送完数据,那么这些数据会被丢弃,TCP会发送RST重置,这是强制关闭过程。
12)SO_MAX_MSG_SIZE
optval参数:unsigned int类型,只能获取;用于设置面向消息的套接字的一条消息的最大长度。
注意:对面向字节流的套接字,该选项没有意义。
13)SO_OOBINLINE
optval参数:BOOL类型,只能获取;如果是TRUE,OOB数据就会在普通数据流中返回。
注意:在调用接收函数时,在默认情况下,OOB数据会值一个单独的调用中返回。若设置了整个选项,OOB数据会出现于从一个接收调用返回的数据流中。在设置了SIOCATMARK前提下,若调用ioctlsocket,变可决定哪个字节时OOB数据。SOCK_DGRAM类型的套接字不支持该选项。
14)SO_OPENTYPE
optval参数:BOOL类型,既可以获取也可以设置;如果设置,随后对socket的调用将返回非重叠句柄。
15)SO_PROTOCOL_INFO
optval参数:BOOL类型,既可以获取也可以设置;返回Winsock套接字协议的条目。
16)SO_RECBUF
optval参数:int 类型,既可以获取也可以设置;面向接收操作,为每个套接字分别获取或设置缓冲区的长度。
17)SO_RECTIMEO
optval参数:int 类型,既可以获取也可以设置;获取或设置于套接字上数据接收对应的超时时间值(以毫秒为单位)。
注意:该选项用于设置或获取接收函数阻塞时间。
18)SO_REUSEADDR
optval参数:BOOL类型,既可以获取也可以设置;如果为TRUE,套接字就可与一个正由另一个套接字使用的地址绑定在一起,或与正处于TIME_OUT状态的地址绑定在一起。
19)SO-SENDBUF
optval参数:int 类型,既可以获取也可以设置;面向发送操作,为每个套接字分别获取或设置缓冲区的长度。
20)SO_SENDTIMEO
optval参数:int 类型,既可以获取也可以设置;获取或设置于套接字上数据发送对应的超时时间值(以毫秒为单位)。
注意:该选项用于设置或获取发送函数阻塞时间。
21)SO_TYPE
optval参数:int 类型,只能获取;返回指定套接字的类型(如SOCK_STREAM或SOCK_DGRAM)。
22)SO_UPDATE_ACCEPT_CONTEXT
optval参数:SOCKET类型,既可以获取也可以设置;用监听套接字的属性来更新客户机套接字上相应的属性。
2.SOL_APPAPPLETALK选项级别
下面这些均为AppleTalk协议专用套接字选项,有:SO_CONFIRM_NAME、SO_DEREGISTER、SO_REMOVE_NAME、SO_LOOKUP_MYZONE、SO_GETMYZONE、SO_LOOKUP_NAME、SO_LOOKUP_ZONES、SO_GETZONELIST、SO_LOOKUP_ZONES_ON_ADAPTER、SO_GETLOCALZONES、SO_LOOKUP_NETDEF_ON_ADAPTER、SO_GETNETINFO、SO_PAP_GET_SERVER_STATUS、SO_PAP_PRIME_READ、SO_PAP_SET_SERVER_STATUS、SO_REGISTER_NAME、SO_REGISTER_NAME。
3.SOL_IRLMP选项级别
与IrDA协议密切相关,其选项不再介绍。
4.IPPROTO_IPx选项级别
这个选项级别的套接字选项与IPv4的特有属性密切联系。
1)IP_OPTIONS
optval参数:char[]类型,既可以获取也可以设置;设置或获取IP头内的IP选项。
2)IP_HARINCL
optval参数:BOOL类型,既可以获取也可以设置;如果为TRUE,IP头将随发送数据一起提交到winsock调用。
3)IP_TOS
optval参数:int类型,既可以获取也可以设置;设置和获取IP头中的服务类型。
4)IP_TTL
optval参数:int类型,既可以获取也可以设置;设置或获取IP头中的TTL。
5)IP_MULTICAST_IF
optval参数:unsigned int类型,既可以获取也可以设置;获取或设置用于发出多播数据的本地接口。
注意:该选项用于设置一个本地接口(对应的IP地址),本地计算机以后发出的任何多播数据都由本接口发送出去。该选项只对有多个网络接口才有意义。
6)IP_MULTICAST_TTL
optval参数:int 类型,既可以获取也可以设置;为套接字获取或设置多播数据的TTL。多播默认TTL为1.
7)IP_MULTICAST_LOOP
optval参数:BOOL类型,既可以设置也可以获取;如果为TRUE,发至的多播数据会原封不动的反射回套接字的进入缓冲区。默认会给套接字数据队列中。
8)IP_ADD_MEMBRSHIP
optval参数:struct ip_mreq类型,只能设置;在指定多播组内,为套接字赋予成员资格。
注意:
struct ip_mreq{ struct in_addr imr_multiaddr;//打算加入的那个多播的二进制地址 struct in_addr imr_interface;//加入多播组时的本地地址};
9)IP_DROP_MEMBERSHIP
optval参数:struct ip_mreq类型,只能设置;将指定套接字从多播源中删除。
10)IP_ADD_SOURCE_MEMBERSHIP
optval参数:struct ip_mreq_source类型,只能设置;加入多播组,但仅从给定源接受数据。
注意:
struct ip_mreq_source{ struct in_addr imr_multiaddr;//打算加入的那个多播的二进制地址 struct in_addr imr_sourceaddr;//可接受源的IP地址。 struct in_addr imr_interface;//加入多播组时的本地地址};
11)IP_DROP_SOURCE_MEMBERSHIP
optval参数:struct ip_mreq_source类型,只能设置;从可接受源列表中删除可接收源
12)IP_BLOCK_SOURCE
optval参数:struct ip_mreq_source类型,只能设置;加入一个多播组,但接受IPv4源外的每个地址的数据。
13)IP_UNBLOCK_SOURECE
optval参数:struct ip_mreq_source类型,既可以获取也可以设置;将给定的IPv4源添加到可接受源列表中。
14)IP_DONTFRAGMENT
optval参数:BOOL类型,既可以获取也可以设置;如果为TRUE,就不对IP数据报分段。
注意:设置了这个选项后,如果IP数据报大于MTU,就会被丢弃,并返回ICMP错误。
15)IP_PKTINFO
optval参数:int类型,只能设置;指明时候冲WSARecvMsg返回数据报信息。
5、IPPROTO_IPV6选项级别
这个选项级别是属于IPv6的套接字选项。该选项级别的套接字选项有:IPV6_HDRINCL、IPV6_UNICAST_HOPS、IPV6_MULTICAST_IF、IPV6_MULTICAST_HOPS、IPV6_MULTICAST_LOOP、IPV6_ADD_MEMERSHIP、IPV6_JOIN_GROUP、IPV6_DROUP_MEMBERSHIP、IPV6_LEAVE_GROUP、IPV6_PKEINFO。
6、IPPROTO_RM选项级别
该选项级别用于可靠的多播传输。该选项级别的套接字选项有:RM_RATE_WINDOW_SIZE、RM_SET_MESSAGE_BOUNDARY、RM_FLUSHCACHE、RM_SENDER_WINDOW_ADVANCE_METHOD、RM_SENDER_STATISTICS、RM_LATEJOIN、RM_SET_SEND_IF、RM_ADD_RECEIVE_IF、RM_DEL_RECEIVE_IF、RM_SEND_WINDOW_ADV_RATE、RM_USE_FEC、RM_SET_MCAST_TTL、RM_RECEIVER_STATISTICS。
6、IPPROTO_TCP选项级别
仅有一个选项是该级别的。该选项值适用于流套接字,其地址族为AF_INET。
1)TCP_NODEAY
optval参数:BOOL类型,既能获取也能设置;若为TRUE,就会在套接字上禁用Nagle算法。
7、NSPROTO_IPX选项级别
该选项级别是给Microsoft公司对Windows IPX/SPX套接字接口所做的特有扩展。其套接字选项有:IPX_PTYPE、IPX_FILTERPTYPE、IPX_STOPFILETERPTYPE、IPX_DSTYPE、IPX_EXTENED_ADDRESS、IPX_RECVHDR、IPX_MAXSIZE、IPX_ADDRESS、IPX_GETNERINFO、IPX_GETNERINFO_NORIP、IPX_SPXGETCONNECTIONSTATUS、IPX_ADDRESS_NOTIFY、IPX_MAX_ADAPTER_NUM、IPX_RERIPNETNUMBER、IPX_RECEIVE_BROADCAST、IPX_IMMEDIATESPXZCK.
- 套接字选项
- 套接字选项
- 套接字选项setsockopt()
- 通用套接字选项
- 7 套接字选项
- 套接字选项介绍
- 套接字选项
- 套接字选项
- 套接字选项
- 套接字选项
- 套接字选项
- 套接字的选项
- 套接字选项
- 套接字选项
- [转]套接字选项
- 取得套接字选项
- SOCKET套接字选项
- Linux____套接字选项
- Linux驱动开发之环境搭建----Ubuntu 12.4 编译内核
- 还是求和,这个有点难度
- 计算分数的和
- eclipse tomcat 更改内存缓冲区
- 『常识』中断、轮询
- 套接字选项
- linux小记
- 1-20求和
- Linux设备驱动开发-交叉编译环境的建立
- iOS开发 修改工程名
- 8种Nosql数据库系统对比
- 第十周-2 分数循环求和
- jetty的安装
- SharedPreferences