停止接受新的连接
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之前将套接字设置为非阻塞。相关文章:
- 当套接字连接断开时检测C/C++Unix
- 无法在windows上使用mingw将sqlite3与c连接
- 到连接组件算法的问题(递归)
- QTcpSocket在不阻塞GUI的情况下重新连接到服务器
- 无法在C++中建立与MySQL数据库的连接
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 在Qt Creator中,如何在连接到正在运行的进程后查看控制台输出
- 连接 dockerized 模型和 dockerized 数据库时出现"无法 SQLConnect"错误
- 使用 bfs 解决连接组件问题时得到错误的答案
- 在C++的两个字符串中连接以逗号分隔的唯一值
- 如何修复valgrind启动时的致命错误(与libc6-dbg和libc6-dbg:i386连接)
- C++应用程序 MySQL odbc 数据库连接错误:在引发"otl_tmpl_exception<>"实例后终止调用
- OSX蓝牙打开RFCOMMChannelAsync声称已连接,但未建立连接,并且从未调用过委托
- 在 libcurl 连接池中预创建连接
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- libcurl 和 DNS ttl 中的内部连接管理
- 如何应用 libcurl 的持久连接选项
- 提升 ASIO - io_service 不要等待连接到线程
- WinSock2:connect() 提供"连接被拒绝"
- 升压信号2将插槽传递到成员功能以断开连接