我想停止接受主线程的连接..我在这里复制了原始代码。在这个服务器。它为每个连接产生一个新线程。有一个单独的线程来清理连接池,另一个线程用于用户命令处理完全正常。我只是想停止接受基于用户命令的新连接。在主线程中存在accept方法,我使用以下逻辑来停止接受
while (bListening && (sctCommSocket = accept(sctBaseSocket,(struct sockaddr *)&addrClient,&c)) != INVALID_SOCKET)
但是在将bListening设置为true之后..循环仍然接受1个连接..但这不是预期的。请解释
答案 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
有多种方法可以解决这个问题,最好的方法是"最好的"将取决于您的具体情况。正如评论者建议的那样,在第一次拨打接受之前,您必须将套接字设置为非阻塞。