常用套接字属性设置
[TOC]
1.读取/设置套接字属性
其中可设置的套接字一般分为
IPPROTO_IP 可选项是IP协议相关事项
IPPROTO_TCP 层可选项是 TCP 协议的相关事项
SOL_SOCKET 层是套接字的通用可选项。
SOL_SOCKET层:
SOL_SOCKET
SO_SNDBUF
O
O
SOL_SOCKET
SO_RCVBUF
O
O
SOL_SOCKET
SO_REUSEADDR
O
O
SOL_SOCKET
SO_KEEPALIVE
O
O
SOL_SOCKET
SO_BROADCAST
O
O
SOL_SOCKET
SO_DONTROUTE
O
O
SOL_SOCKET
SO_OOBINLINE
O
O
SOL_SOCKET
SO_ERROR
O
X
SOL_SOCKET
SO_TYPE
O
X
IPPROTO_IP层:
IPPROTO_IP
IP_TOS
O
O
IPPROTO_IP
IP_TTL
O
O
IPPROTO_IP
IP_MULTICAST_TTL
O
O
IPPROTO_IP
IP_MULTICAST_LOOP
O
O
IPPROTO_IP
IP_MULTICAST_IF
O
O
IPPROTO_IP
IP_ADD_MEMBERSHIP
O
O
IPPROTO_IP
IP_DROP_MEMBERSHIP
O
O
IPPROTO_TCP层:
IPPROTO_TCP
TCP_KEEPALIVE
O
O
IPPROTO_TCP
TCP_NODELAY
O
O
IPPROTO_TCP
TCP_MAXSEG
O
O
2.SO_TYPE属性(查看套接字类型)
验证套接类型的 SO_TYPE 是只读可选项,因为套接字类型只能在创建时决定,以后不能再更改
通过该属性可以查看该套接字类型是TCP还是UDP类型
3.SO_REUSEADDR属性(端口复用)
SO_REUSEADDR可以用在以下四种情况下。 (摘自《Unix网络编程》卷一,即UNPv1)
1、当有一个有相同本地地址和端口的socket1处于TIME_WAIT状态时,而你启动的程序的socket2要占用该地址和端口,你的程序就要用到该选项。
2、SO_REUSEADDR允许同一port上启动同一服务器的多个实例(多个进程)。但每个实例绑定的IP地址是不能相同的。在有多块网卡或用IP Alias技术的机器可以测试这种情况。
3、SO_REUSEADDR允许单个进程绑定相同的端口到多个socket上,但每个socket绑定的ip地址不同。这和2很相似,区别请看UNPv1。
4、SO_REUSEADDR允许完全相同的地址和端口的重复绑定。但这只用于UDP的多播,不用于TCP。
需要注意的是,设置端口复用函数要在绑定之前调用,而且只要绑定到同一个端口的所有套接字都得设置复用
默认是0,设置为1即可开启端口复用
4.TCP_NODELAY属性(开启/禁用Nagle算法)
TCP套接字传输过程中默认是使用Nagle算法交换数据的,标志位为0
Nagle算法可理解为:
只有收到前一数据的ACK消息时,Nagle算法才发送下一数据
Nagle
算法并不是什么情况下都适用,网络流量未受太大影响时,不使用 Nagle
算法要比使用它时传输速度快。最典型的就是"传输大数据文件"
禁用方法:将标志位设置为1
5.IP_MULTICAST_TTL(设置ip数据包的TTL值)
IP_MULTICAST_TTL用于设置超时TTL,范围为0 - 255
6.IP_MULTICAST_IF(设置多播默认网络接口)
选项IP_MULTICAST_IF用于设置组播的默认网络接口,会从给定的网络接口发送,另一个网络接口会忽略此数据
参数addr是希望多播输出接口的IP地址,使用INADDR_ANY地址回送到默认接口。
7.IP_MULTICAST_LOOP(设置多播是否发送数据到本地loop地址)
默认情况下,当本机发送组播数据到某个网络接口时,在IP层,数据会回送到本地的回环接口,选项IP_MULTICAST_LOOP用于控制数据是否回送到本地的回环接口。
8.IP_ADD_MEMBERSHIP和IP_DROP_MEMBERSHIP(加入退出多播组)
加入或者退出一个多播组,通过选项IP_ADD_MEMBERSHIP和IP_DROP_MEMBERSHIP,对一个结构struct ip_mreq类型的变量进行控制,struct ip_mreq原型如下:
选项IP_ADD_MEMBERSHIP用于加入某个多播组,之后就可以向这个多播组发送数据或者从多播组接收数据。此选项的值为mreq结构,成员imn_multiaddr是需要加入的多播组IP地址,成员imr_interface是本机需要加入广播组的网络接口IP地址,一般可设置为INADDR_ANY
9.SO_BROADCAST(设置允许广播)
数据通信中使用的IP地址是与 UDP 示例的唯一区别。默认生成的套接字会阻止广播,因此,只需通过如下代码更改默认设置。
Last updated