C++ Winsock-停止接受新连接,但与现有连接保持通信

C++ Winsock-停止接受新连接,但与现有连接保持通信,c++,sockets,winsock,C++,Sockets,Winsock,我有一个基于Winsock的服务器应用程序,它使用Windows Winsock I/O完成端口 因此,接受的每个连接都与侦听套接字相关联,以开始接收通知(读、写、关闭等)。 侦听套接字积压了100个挂起的连接。 一切都很好 在某个时刻,我想停止接受新连接,同时保持与已连接的现有套接字的通信 我想我可以做一个: 停止调用wsaaaccept() 将backlog设置为零,实际上不允许任何与pend的连接 在侦听套接字上调用shutdown()&closesocket() 现在,选项1给出了预期结

我有一个基于Winsock的服务器应用程序,它使用Windows Winsock I/O完成端口

因此,接受的每个连接都与侦听套接字相关联,以开始接收通知(读、写、关闭等)。
侦听套接字积压了100个挂起的连接。
一切都很好

在某个时刻,我想停止接受新连接,同时保持与已连接的现有套接字的通信

我想我可以做一个:

  • 停止调用wsaaaccept()
  • 将backlog设置为零,实际上不允许任何与pend的连接
  • 在侦听套接字上调用shutdown()&closesocket()
  • 现在,选项1给出了预期结果;我的应用程序不处理新的连接,但它可以接受积压的数量(100)。连接实际上是建立的-我不想要它

    选项2;我可以这样做吗?怎么用?在MSDN或谷歌上找不到。MSDN的文件中说

    如果在 已在侦听套接字,它将 返回成功而不更改 backlog参数的值。 在中将backlog参数设置为0 随后的呼叫,用于侦听 侦听套接字不被视为 正确复位,尤其是在有 插座上的连接

    对我不好。
    如果我能以安全的方式这样做,我会将它与选项1结合起来,有效地停止在机器上建立任何新连接(通过侦听端口!)

    选项3实际有效;关闭监听套接字后,我仍然可以与现有连接通信,积压工作也就没有了(好吧,关闭监听套接字!)


    我担心这种方法可能会有一些副作用。有人可以确认吗?

    您只需关闭监听插座即可。接受的连接有自己的套接字,关闭侦听套接字不会影响它们

    例如,在Microsoft文档中演示了套接字的基本用法。在通过接受的套接字进行通信之前(在do while循环之前),侦听套接字关闭。

    回答非常好!“证据”正是我内心平静所需要的!!看,我担心新接受的conn与IOCP侦听套接字的关联会产生一些依赖性。再次感谢你!