c++ - Asio 中新连接出现 "Already Open"错误

标签 c++ tcp boost-asio

我正在使用 Asio 的非 Boost 版本,并根据 http://think-async.com/Asio/asio-1.11.0/doc/asio/tutorial/tutdaytime3.html 中的代码创建了一个 TCP 服务器。

我可以很好地建立与服务器的连接,但只是第一次。如果我断开我的客户端然后尝试再次连接,Asio 将“已经打开”错误传递给我的接受处理程序。从代码中可以看出,在接受连接之前,会创建一个 tcp_connection 类的新实例。我不确定为什么会收到此错误,即使它是一个完全独立的实例,其套接字不应已打开。任何帮助将不胜感激。

提前致谢。

编辑:

这是服务器类: http://pastebin.com/yvZmFQvA

和客户端类(相当于例子中的tcp_connection类): http://pastebin.com/LDhr2nZz

最佳答案

这可能是因为您在断开连接时没有正确关闭套接字。由于无法处理的异常(例如信号 9)可能会导致断开连接,因此即使进程没有正常终止,您也需要一个解决方案来工作...

我相信这可以解决它:

Socket options SO_REUSEADDR and SO_REUSEPORT, how do they differ? Do they mean the same across all major operating systems?

关于c++ - Asio 中新连接出现 "Already Open"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29870776/

相关文章:

c++ - 就生成随机数而言,种子是什么?

Java - "no buffer space available"套接字错误原因?

c++ - timespec 初始化时非阻塞 TCP 套接字挂起 (C++)

c++ - 如何使用 boost asio 读取固定大小的数据包?

c++ - 将 thread_pool 与 deadline_timer 组合 - 模板问题(时间)

c++ - 将 C 字符串转换为 int 数组

c++ - 为什么 std::thread 在其构造函数中等待?

c++ - 串行端口性能 - VB.NET 与 C++ & Boost

c++ - 没有显式特化声明的显式模板特化

asp.net - 检测 ASP.NET 网站的出站连接排队