struct linger
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会直接返回值。
原文: structlinger
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2015-11-27 19:29:01
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!
转载注明: struct linger (米扑博客)