【发布时间】:2015-03-10 06:18:18
【问题描述】:
基于这个question,当你在recv()已经在使用的socket上调用closesocket()时,一个RST数据包将被发送到另一端,而不是执行一个优雅的断开连接(4路握手)。
但我希望执行优雅的断开连接,所以我需要在调用closesocket() 之前退出recv()。
有没有办法做到这一点?
【问题讨论】:
-
您不能在
recv已经在使用的套接字上调用closesocket。尝试编写代码来做到这一点,这几乎是不可能的。您需要某种方式来知道recv已经使用某种线程上下文检查访问了套接字。您的代码将不可避免地存在可能发生可怕事情的竞争条件。 -
"当您在 recv() 已经使用的套接字上调用 closesocket() 时,将向另一端发送一个 RST 数据包" 这确实不是真的。 RST 是由于在有未读待处理数据时关闭套接字的行为引起的。
标签: c++ sockets winapi network-programming winsock