boost :: asio - 关于绑定到特定网络接口的说明

时间:2010-08-25 22:19:58

标签: sockets boost-asio

我一直在网上搜索答案,但我似乎找不到完整的答案。

场景:我有一个客户端API和一个服务器。应用程序使用客户端API与服务器通信。 TCP和UDP都用于在客户端API和服务器之间进行通信。所有这些都是使用ASIO编写的。

客户端API通过TCP连接到服务器,然后通过TCP发送命令并通过TCP接收响应。客户端API还会侦听UDP地址,以便连续接收实时数据。

环境是运行WIN32和WIN64的混合机器。所有机器也有2个网卡。

问题:我希望能够将我的TCP和UDP连接“固定”到特定的本地网络接口。我已经看到一些讨论SO_BINDTODEVICE套接字选项以及早期帖子或其他网站的绑定功能的信息。

是否可以在WIN32 / 64环境中执行此操作?如果您能够对此有所了解,一些示例或有用的网站我会非常感激。

我发现的链接:

  1. Using Linux, how to specify which ethernet interface data is transmitted on
  2. http://tuxology.net/2008/05/15/forcing-connections-through-a-specific-interface/

1 个答案:

答案 0 :(得分:8)

您可以使用相应的tcp::ip::acceptor constructor

绑定到特定端点
include <boost/asio.hpp>

int
main()
{
    using namespace boost::asio;
    io_service service;
    ip::tcp::endpoint ep(
            ip::address::from_string( "127.0.0.1" ),
            1234
            );
    ip::tcp::acceptor acceptor( 
            service,
            ep
            );
}