SO_LINGER使用
2015-12-23 16:16
375 查看
1.
当调用close函数时,套接口s会立即中止。中止的语义是通过将超时值设置为0来实现的
如果l_onoff为0,则延迟关闭特性就被取消。
如果非零,则允许套接口延迟关闭; l_linger字段则指明延迟关闭的时间 。
更具体的描述如下:
1、若设置了SO_LINGER(亦即linger结构中的l_onoff域设为非零),并设置了零超时间隔,则closesocket()不被阻塞立即执行,不论是否有排队数据未发送或未被确认。这种关闭方式称为“强制”或“失效”关闭,因为套接口的虚电路立即被复位,且丢失了未发送的数据。在远端的recv()调用将以WSAECONNRESET出错。
2、若设置了SO_LINGER并确定了非零的超时间隔,则closesocket()调用阻塞进程,直到所剩数据发送完毕或超时。这种关闭称为“优雅”或“从容”关闭。请注意如果套接口置为非阻塞且SO_LINGER设为非零超时,则closesocket()调用将以WSAEWOULDBLOCK错误返回。
3、若在一个流类套接口上设置了SO_DONTLINGER(也就是说将linger结构的l_onoff域设为零),则closesocket()调用立即返回。但是,如果可能,排队的数据将在套接口关闭前发送。请注意,在这种情况下WINDOWS套接口实现将在一段不确定的时间内保留套接口以及其他资源,这对于想用所以套接口的应用程序来说有一定影响。
linger link; link.l_onoff = 1; link.l_linger = 0; setsockopt(m_sockConnect, SOL_SOCKET, SO_LINGER, (const char*)&link, sizeof(linger));
当调用close函数时,套接口s会立即中止。中止的语义是通过将超时值设置为0来实现的
如果l_onoff为0,则延迟关闭特性就被取消。
如果非零,则允许套接口延迟关闭; l_linger字段则指明延迟关闭的时间 。
更具体的描述如下:
1、若设置了SO_LINGER(亦即linger结构中的l_onoff域设为非零),并设置了零超时间隔,则closesocket()不被阻塞立即执行,不论是否有排队数据未发送或未被确认。这种关闭方式称为“强制”或“失效”关闭,因为套接口的虚电路立即被复位,且丢失了未发送的数据。在远端的recv()调用将以WSAECONNRESET出错。
2、若设置了SO_LINGER并确定了非零的超时间隔,则closesocket()调用阻塞进程,直到所剩数据发送完毕或超时。这种关闭称为“优雅”或“从容”关闭。请注意如果套接口置为非阻塞且SO_LINGER设为非零超时,则closesocket()调用将以WSAEWOULDBLOCK错误返回。
3、若在一个流类套接口上设置了SO_DONTLINGER(也就是说将linger结构的l_onoff域设为零),则closesocket()调用立即返回。但是,如果可能,排队的数据将在套接口关闭前发送。请注意,在这种情况下WINDOWS套接口实现将在一段不确定的时间内保留套接口以及其他资源,这对于想用所以套接口的应用程序来说有一定影响。
相关文章推荐
- php获取服务器系统信息
- 初识Hadoop's Ecosystem
- AD账户UserAccountControl对应的值
- 不得不分享的JavaScript常用方法函数集(上)
- 过滤器
- Android Accessibility(辅助功能) --实现Android应用自动安装、卸载
- 实现DUBBO服务环境隔离
- IOS OC笔试题、swift、OC
- Mysql小知识
- asp.net mvc3.0安装失败之终极解决方案
- 杂记
- ajax参数详解
- 如何查看android data 内容
- SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
- [流水账] eclipse老是关联包错误的解决办法
- 6. Magento2 --- 创建主题
- ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password:YES)
- python 笔记
- Linux/Unix下安装MySQLdb的简单方式
- 文件上传组件Plupload详解