优雅关闭是什么

  • 学习自这篇博客
  • 优雅关闭是在结束传输的时候调用shutdown函数而不是close/closesocket函数
  • 好处
    • 调用close之后,即便仍有数据未发送,或者发送的数据尚未确认收到,对应的fd也会被销毁,也就是说连接直接中断
    • 调用shutdown,并且设置了参数SO_LINGER>0(该参数代表延时事件)之后,连接只有超过这个事件,或者发送完数据才会中断。
    • shutdown()不会销毁fd,它只会关闭字节流,但是会给对方发送FIN信号
    • 优雅关闭过程
shutdown(fd, SHUT_RDWR);
           struct linger linger;
           linger.l_onoff = 1;
           linger.l_linger = 1;
           setsockopt(fd, SOL_SOCKET, SO_LINGER, (char *) &linger, sizeof(linger));
           close(fd);
  • 其中linger是延时结构体
struct linger{
	 	l_onoff ;
	 	l_linger;
	 };
  • 顾名思义:l_onoff代表是否开启延时,如果为0,那么,不管l_linger的值,都会默认调用close,否则,如果l_linger>0,则等到l_linger事件之后才会断开连接,如果l_linger==0 则直接发送RST包给对方,不会经历四次挥手阶段,因此也就避TIME_WAIT的产生
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值