当前位置: 技术问答>linux和unix
SOCKET 编程之从容关闭套接字如何实现????
来源: 互联网 发布时间:2016-04-20
本文导语: 使用setsockopt()函数设置SO_DONTLINGER选项,说的是“某些支持套接字连接的从容关闭”,就是说如果套接字上 面还有数据正在发送或者是接受的话,那么调用了closesoket(),会等到数据真正的发送或者是接受的时候才关闭...
使用setsockopt()函数设置SO_DONTLINGER选项,说的是“某些支持套接字连接的从容关闭”,就是说如果套接字上
面还有数据正在发送或者是接受的话,那么调用了closesoket(),会等到数据真正的发送或者是接受的时候才关闭连
接,释放与套接字相关联的资源!!!!!!!我的问题是,当设置了SO_DONTLINGER选项,然后立即调用了
closesocket()函数,那么,closesocket()是立即返回,等数据发送完成或是接受完成的时候系统自动关闭呢???
还是closesocket()进入阻塞状态,等待数据真正传送结束了,closesocket()才返回,这个时候哦连接已关闭,资源已释放呢???
面还有数据正在发送或者是接受的话,那么调用了closesoket(),会等到数据真正的发送或者是接受的时候才关闭连
接,释放与套接字相关联的资源!!!!!!!我的问题是,当设置了SO_DONTLINGER选项,然后立即调用了
closesocket()函数,那么,closesocket()是立即返回,等数据发送完成或是接受完成的时候系统自动关闭呢???
还是closesocket()进入阻塞状态,等待数据真正传送结束了,closesocket()才返回,这个时候哦连接已关闭,资源已释放呢???
|
设置了SO_LINGER并设置了零超时间隔,则closesocket()不被阻塞立即执行,不论是否有排队数据未发送或未被确认。这种关闭方式称为 “强制”或“失效”关闭
若设置了SO_LINGER并确定了非零的超时间隔,则closesocket()调用阻塞进程,直到所剩数据发送完毕或超时
若在一个流类套接口上设置了SO_DONTLINGER,则closesocket()调用立即返回,此时系统还将在一段不确定的时间内保留套接口以及其他资源
若设置了SO_LINGER并确定了非零的超时间隔,则closesocket()调用阻塞进程,直到所剩数据发送完毕或超时
若在一个流类套接口上设置了SO_DONTLINGER,则closesocket()调用立即返回,此时系统还将在一段不确定的时间内保留套接口以及其他资源