网站内容管理系统,产品推广语,网页翻译为什么翻译不了,用小程序做视频网站Linux下tcp连接断开的时候调用close()函数#xff0c;有优雅断开和强制断开两种方式。那么如何设置断开连接的方式呢#xff1f;是通过设置socket描述符一个linger结构体属性。linger结构体数据结构如下#xff1a; #include arpa/inet.hstruct linger {int l_onoff…Linux下tcp连接断开的时候调用close()函数有优雅断开和强制断开两种方式。那么如何设置断开连接的方式呢是通过设置socket描述符一个linger结构体属性。linger结构体数据结构如下 #include arpa/inet.hstruct linger {int l_onoff;int l_linger;
};三种断开方式1. l_onoff 0; l_linger忽略close()立刻返回底层会将未发送完的数据发送完成后再释放资源即优雅退出。2. l_onoff ! 0; l_linger 0;close()立刻返回但不会发送未发送完成的数据而是通过一个REST包强制的关闭socket描述符即强制退出。3. l_onoff ! 0; l_linger 0;close()不会立刻返回内核会延迟一段时间这个时间就由l_linger的值来决定。如果超时时间到达之前发送完未发送的数据(包括FIN包)并得到另一端的确认close()会返回正确socket描述符优雅性退出。否则close()会直接返回错误值未发送数据丢失socket描述符被强制性退出。需要注意的时如果socket描述符被设置为非堵塞型则close()会直接返回值。具体用法struct linger ling {0, 0};
setsockopt(socketfd, SOL_SOCKET, SO_LINGER, (void*)ling, sizeof(ling));转载请注明出处 http://www.cnblogs.com/caosiyang/archive/2012/03/29/2422956.html