c – 如何使用具有Boost Asio套接字的特定网络接口/ Ip?
我有一个Debian / linux服务器,它有几个IP地址,都分配给同一个物理网卡. / etc / network / interfaces配置文件如下所示(xx代表数字)
我正在使用Boost Asio处理所有网络连接的客户端应用程序.在此应用程序中,我希望能够使用特定的网络接口/ IP地址连接到外部服务器.我发现this类似的问题,但只是将boost :: asio :: ip :: tcp :: socket绑定到一个specfic端点,然后连接到外部服务器不起作用.这是我尝试过的最小工作示例:
当我在我的服务器上运行时,我得到:
现在我有点迷茫,因为我不知道还有什么可以尝试.我不一定需要一个可移植的解决方案,任何适用于这个Debian设置的东西都可以. 更新 我将为我的设置提供解决方案.如有必要,我可以更改/ etc / network / interfaces配置文件.但是,为了重用我的代码,任何解决方案都必须使用Boost Asio套接字(至少作为包装器). 最佳答案
要绑定到特定接口,您必须首先打开连接.你做到了 – 到目前为止一切顺利.但之后你调用boost :: asio :: connect(socket,remoteEndpoint);这将关闭你的连接(作为服务,所以说).
Boost告诉你它确实如此 – 但你必须仔细观察.在参数下参考重载版本的连接,你正在使用它会说
或者在boost / asio / impl / connect.hpp中的实现:
(注意s.close(ec);) 解决方案 应该很简单.替换boost :: asio :: connect … by
(或者在相应的远程端点上循环,如果需要,类似于boost源代码.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- LINUX实操:SparkyLinux用户安装Linux Kernel 4.12
- LINUX教学:VirtualBox虚拟机上的Ubuntu Linux Java开发环境
- linux – 从多个nginx服务器聚合流量统计数据的最佳工具是什
- linux – 防止git checkout覆盖文件
- 部署ceph
- 如果UID需要更改,则在Linux服务器之间迁移用户?
- linux – 从多个线程调用accept()
- linux – / etc / sudoer / – 是否可以通过putty进入单用户
- linux – 超时期限到期后未清除TIME_WAIT连接
- linux – 防止用户将窗口(xterm,gvim,..)发送到我的VNC显示