Ale*_*der 10 c++ sockets boost boost-asio
我写了一个服务器,它正在监听TCP连接和连接它的客户端.当我关闭服务器并在同一端口重新启动它时,我有时会在调用bind(...)时收到错误消息EADDRINUSE(Linux上的错误代码:98).即使我设置了重用套接字的选项,也会发生这种情况.
错误不会一直发生,但似乎当客户端连接到服务器并在关闭时发送数据时,它会更频繁地发生.我想问题是服务器关闭时仍有未决连接(相关主题:https://stackoverflow.com/questions/41602/how-to-forcibly-close-a-socket-in-time-wait).
在服务器端,我使用boost :: asio :: ip :: tcp :: acceptor.我使用选项"reuse_address"对其进行初始化(请参阅http://beta.boost.org/doc/libs/1_38_0/doc/html/boost_asio/reference/basic_socket_acceptor.html).这是代码片段:
using boost::asio::ip::tcp;
acceptor acceptor::acceptor(io_service);
endpoint ep(ip::tcp::v4(), port);
acceptor.open(ep.protocol());
acceptor.set_option(acceptor::reuse_address(true));
acceptor.bind(ep);
acceptor.listen();
Run Code Online (Sandbox Code Playgroud)
接受者关闭时:
acceptor.close();
Run Code Online (Sandbox Code Playgroud)
我之前也尝试过使用acceptor.cancel(),但它具有相同的效果.发生此错误时,我无法在同一端口上重启服务器很长一段时间.重新启动网络有帮助,但不是永久解决方案.
我错过了什么?
任何帮助将不胜感激!:)