通常我们调用closesocket关闭套接字,套接字的关闭过程,有以下三种情况:
1、取消没有进行的发送操作,系统在后台发起一个关闭过程,向对等方发送FIN报文,并等待对等方的FIN报文。整个关闭过程不会产生任何的事件(WSAEventSelect)和消息(WSAAsyncSelect)。
2、直接释放占用的系统资源,没有向对等方发送任何的数据,也不会发送缓冲队列的数据;
3、等待一段时间,如果能够在指定时间内将未发送的数据发送出去,那么会在后台发起一个关闭过程;如果不能够在指定时间内发送完数据,则立即释放资源,也不会向对等方发送数据。这种情况的关闭过程同样不会产生事件和消息。
新建套接字,调用closesocket的默认行为是第一种情况。可以通过setsockopt修改默认行为,具体的设置参见MSDN对SO_LINGER, SO_DONTLINGER。
本文详细解释了使用closesocket关闭套接字时的三种不同行为:取消发送操作、直接释放资源和等待数据发送。每种情况都涉及系统资源的管理,为开发者提供了深入理解网络编程中套接字关闭机制的指南。
2580

被折叠的 条评论
为什么被折叠?



