加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 已使用boost asio接收器的地址

发布时间:2020-12-16 07:54:07 所属栏目:百科 来源:网络整理
导读:我写了一个正在监听TCP连接和连接到它的客户端的服务器.当我关闭服务器并重新启动它在同一个端口,我有时会收到错误消息EADDRINUSE调用bind(…)(错误代码:98在 Linux上).即使我正在设置重新使用套接字的选项,也会发生这种情况. 错误不会一直发生,但是当客户
我写了一个正在监听TCP连接和连接到它的客户端的服务器.当我关闭服务器并重新启动它在同一个端口,我有时会收到错误消息EADDRINUSE调用bind(…)(错误代码:98在 Linux上).即使我正在设置重新使用套接字的选项,也会发生这种情况.

错误不会一直发生,但是当客户端连接到服务器并在关闭时发送数据似乎更频繁.我想问题是服务器关闭时仍然有挂起的连接(相关主题: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();

受理人关闭:

acceptor.close();

我也尝试在之前使用acceptor.cancel(),但它具有相同的效果.发生此错误时,我无法在同一个端口上重新启动服务器一段时间.重新启动网络有助于,但不是永久性的解决方案.

我失踪了什么

任何帮助将不胜感激!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读