八 套接字的多种可选项

8.1 I/O缓冲大小


SO_RCVBUF是输入缓冲大小相关可选项,SO_SNDBUF是输出缓冲大小相关可选项。用这2个可选项既可以读取当前


I/O缓冲大小,也可以进行更改。


系统不会100%按照我们的请求设置缓冲大小,因为要实现流控制和错误发生时的重传机制,至少要有一些缓冲空


间吧?


8.2 SO_REUSEADDR选项


SO_REUSEADDR选项及其Time-wait状态很重要。


在服务器端控制台输入CTRL+C强制关闭服务器端,如果用同一端口号重新运行服务器端,将输出binderror消息,


大约3分钟后可重新运行服务器端。


为什么会有Time-wait状态?


在断开连接的四次握手中,考虑到主机A发送的最后一个ACK消息在传递途中可能丢失,如果主机A完全终止,主机


B将永远无法收到主机A最后传来的ACK消息。


因此,先传输FIN消息的主机应经过Time-wait过程。





服务器发生故障时需要尽快重启以提供服务,但因Time-wait状态而必须等几分钟。


解决方案:调整SO_REUSEADDR参数,可将Time-wait状态下的套接字端口号重新分配给新的套接字。


8.3  TCP_NODELAY


只有收到前以数据的ACK消息时,Nagle算法才发送下一数据。




TCP套接字默认使用Nagle算法交换数据,因此最大限度的进行缓冲,直到受到ACK


即使只传1个字节的数据,其头信息都有可能是几十个字节。因此,为了提高网络传输效率,必须使用Nagle算法。



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值