我有一个基于Winsock的服务器应用程序,它使用Windows Winsock I / O完成端口。
因此,接受的每个连接都与侦听套接字相关联,以开始接收通知(读取,写入,关闭等)。 侦听套接字有100个未决连接的积压 一切都很好。
在某些时候,我想停止接受新连接,同时保持与已连接的现有连接套接字的通信。
我想我可以做其中一个:
现在,选项#1 会给出预期的结果;我的应用程序不处理新连接,但它确实接受积压的数量(100)。实际上是连接 - 我不想要它!
选项#2 ;我能这样做吗?怎么样?在MSDN上也找不到谷歌。 MSDN上listen()的文档说明;
如果调用listen函数 已经在监听套接字,它会 返回成功而不改变 backlog参数的值。 将backlog参数设置为0 in 随后打电话来听一听 监听套接字不被认为是 适当的重置,特别是如果有的话 插座上的连接。
对我不好。
如果我能以安全的方式这样做,我会将它与选项#1结合起来,有效地停止在机器上建立任何新的连接(通过监听端口!)。
选项#3 实际上有效;关闭监听套接字后,我仍然可以与现有连接通信,并且积压工作已经消失(好吧,关闭监听套接字!)。
我担心这种方法可能会产生一些副作用。任何人都可以确认吗?
答案 0 :(得分:9)
您只需关闭侦听套接字即可。接受的连接有自己的套接字,关闭监听套接字不会影响它们。
例如,在Microsoft文档中有a sample server application,其中演示了基本的套接字使用情况。在通过接受的套接字进行通信之前(在do-while-loop之前),监听套接字被关闭。