停止接受新的连接

Stop accepting new connections

本文关键字:连接      更新时间:2023-10-16

我想停止接受来自主线程的连接。我在这里复制了原始代码。在此服务器中。它为每个连接生成一个新线程。有一个单独的线程来清理连接池,另一个线程用于用户命令处理,所有这些都工作得很好。我只是想停止接受基于用户命令的新连接。accept方法存在于主线程中。我使用以下逻辑来停止接受

while (bListening && (sctCommSocket = accept(sctBaseSocket,(struct sockaddr *)&addrClient,&c)) != INVALID_SOCKET)

但设置bListening为true后…循环仍然接受1个连接。但这是意料之外的。请解释

当您设置标志时,循环已经在accept()中被阻塞,因此它接受下一个连接。

这与这里提出的问题非常相似:是否可能(并且安全)使接受套接字非阻塞?

我认为这也会解决你的问题,尽管从代码片段中不清楚你使用的是什么操作系统和多线程库。

编辑:

这里有一个很好的网络编程指南:http://beej.us/guide/bgnet/output/html/singlepage/bgnet.html

专门解决阻塞问题的一节是http://beej.us/guide/bgnet/output/html/singlepage/bgnet.html#Blocking

有多种方法可以解决这个问题,哪一种"最好"取决于你的具体情况。正如一位评论者建议的那样,您必须在第一次调用accept之前将套接字设置为非阻塞。