停止接受新连接

时间:2016-11-04 07:00:42

标签: c++ multithreading networking

我想停止接受主线程的连接..我在这里复制了原始代码。在这个服务器。它为每个连接产生一个新线程。有一个单独的线程来清理连接池,另一个线程用于用户命令处理完全正常。我只是想停止接受基于用户命令的新连接。在主线程中存在accept方法,我使用以下逻辑来停止接受

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

但是在将bListening设置为true之后..循环仍然接受1个连接..但这不是预期的。请解释

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:-1)

这与此处提出的问题非常相似:Is it possible (and safe) to make an accepting socket non-blocking?

我认为这也将解决您的问题,尽管从代码片段中您不清楚您正在使用的操作系统和多线程库。

编辑:

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

专门解决阻止问题的部分是http://beej.us/guide/bgnet/output/html/singlepage/bgnet.html#Blocking

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