网络编程--套接字选项

基本套接字选项

1. SO_BROADCAST

 开启或禁止进程发送广播消息的能力。


2. SO_DEBUG

 开启该选项后,内核将为TCP在该套接字发送和接收的所有分组保留详细跟踪信息。这些信息保存在内核的某个环型 缓冲区中


3. SO_KEEPALIVE
 如果两小时内在该套接字的任一方向上都没有数据交换,TCP就自动给对端发送一个保持存活探测分节,它导致以下三种情况之一
 3.1 对端以期望的ACK响应,应用进程得不到通知,在右经过仍无动静的2小时后,TCP将发出另一个探测分节
 3.2 对端以RST响应,它告知本端TCP,对端已崩溃且已重新启动

 3.3 对端对保持存活探测分节没有任何响应。


4. SO_LINGER

 本选项指定close函数对面向连接的协议如何操作。默认操作close是立即返回。但是如果有数据残留在套接字发送缓冲区中,系统将试着把这些数据发送给对端


linger的数据结构,在<sys/socket.h>中定义

struct linger

  int l_onoff;  //0-off nonzero-on

  int l_linger;

};

 4.1 如果l_onoff为0,那么关闭本选项,l_lingger的值被忽略,close立即返回

 4.2 如果l_onoff为非0其l_linger为0,那么当close某个连接时TCP将中止该连接。这就是说TCP将丢弃保留在套接字发送缓冲取中的任何数据,并发送一个RST给对端,而没有通常的四分组连接终止序列,这样避免了TIME_WAIT状态

 4.3 如果l_onoff为非0且l_linger也为非0,那么当套接字关闭时内核将拖延一段时间。这就是说如果在套接字发送缓冲区中仍残留有数据,那么进程将被投入睡眠,知道所有数据都已发送完且均被对方确认或者延滞时间已到。


5. SO_RCVLOWAT和SO_SNDLOWAT

  每个套接字有一个接收低水位和一个发送低水位。他们由select函数使用。接收低水位标记是让select返回"可读"时套接字接收缓冲区中所需的数据量。对于,TCP,UDP,SCTP,其默认值为1。发送低水位标记是让select返回"可写"时套接字发送缓冲区中所需的可用空间。对于TCP套接字,其默认值常为2048.而UDP套接字的发送缓冲区中可用空间的字节数从不改变(因为UDP从不为由应用程序传递给他的数据报保留副本),只要一个UDP套接字的发送缓冲区大小大于该套接字的低水位标记,该UDP套接字总是可写


6 SO_RCVTIMEO和SO_SNDTIMEO
 这两个选项允许我们给套接字的接收和发送设置一个超时值。发送超时影响
write, send, sendto, sendmsg

接收超时影响:read,recvfrom, recvmsg


7 SO_REUSERADDR和SO_REUSERPORT
 7.1 SO_REUSEADDR,允许启动一个监听服务器并捆绑其众所周知端口,即使以前建立的将该端口用作他们的本地端口的连接仍存在
 7.2 SO_REUSEADDR  允许在同一个端口上启动同一服务器的多个实例,只要每个实例捆绑一个不同的本地IP地址
 7.3 SO_REUSEADDR允许单个进程捆绑同一个端口到多个套接字上,只要每次捆绑指定不同的本地IP地址即可
 7.4 SO_REUSEPORT选项允许完全重复的捆绑,不过只有在想要捆绑同一IP地址河段口的每个套接字斗志顶了本套接字选项才行
  建议:
  1. 在所有TCP服务器程序中,在调用bind之前设置SO_REUSRADDR套接字选项
  2. 当编写一个可在同一时刻在同一主机上运行多次的躲避应用程序时,设置SO_REUSRADDR套接字选项,并将所参加多播组的地址作为本地IP地址捆绑

 8. SO_RCVBUF和SO_SNDBUF

  每个套接字都有一个发送缓冲区和一个接收缓冲区。接收缓冲区被TCP,UDP和SCTP用来保存接收到的数据,直到应用程序进程来读取,大小限定为TCP通告对端的窗口大小。由于TCP有流量控制,所以接收缓冲区不可能溢出。但是UDP是没有流量控制的,较快的发送端可以很容易的淹没较慢的接收端,导致接收端的UDO丢弃数据报。

TCP套接字选项

  1. TCP_MAXSEG 

 允许我们设置或获取TCP连接的最大分节大小(MSS),返回值是我们的TCP可以发送给对端的最大数据量

 2. TCP_NODELAY

  开启本选项将禁止TCP的Nagle算法,默认情况下该算法是启动的



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值