前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >struct linger

struct linger

作者头像
阳光岛主
发布2019-02-19 17:57:09
6890
发布2019-02-19 17:57:09
举报
文章被收录于专栏:米扑专栏米扑专栏

 TCP连接断开的时候调用close socket函数,已经讨论过有优雅的断开和强制断开,那么如何设置断开连接的方式呢?

是通过设置socket描述符一个linger结构体属性。

linger结构体数据结构如下:

struct linger { int l_onoff; int l_linger; };

有三种组合方式:

第一种

    l_onoff = 0;

    l_linger忽略

这种方式下,就是在closesocket的时候立刻返回,底层会将未发送完的数据发送完成后再释放资源,也就是优雅的退出.

第二种

    l_onoff非零

    l_linger = 0;

这种方式下,在调用close socket的时候同样会立刻返回,但不会发送未发送完成的数据,而是通过一个REST包强制的关闭socket描述符,也就是强制的退出。

第三种

    l_onoff非零

    l_linger > 0

这种方式下,在调用close socket的时候不会立刻返回,内核会延迟一段时间,这个时间就由l_linger得值来决定。如果超时时间到达之前,发送完未发送的数据(包括FIN包)并得到另一端的确认,close socket会返回正确,socket描述符优雅性退出。

否则,close socket会直接返回错误值,未发送数据丢失,socket描述符被强制性退出。

需要注意的时,如果socket描述符被设置为非堵塞型,则close socket会直接返回值。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2010年11月11日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档