代码之家  ›  专栏  ›  技术社区  ›  skimobear

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

  •  5
  • skimobear  · 技术社区  · 14 年前

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

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

    客户端API通过TCP连接到服务器,然后通过TCP发送命令并通过TCP接收响应。客户端API还监听一个UDP地址,在该地址中它连续地接收实时数据。

    环境是运行win32和win64的机器的混合体。所有的机器都有2个网卡。

    问题:我希望能够“固定”我的TCP和UDP连接到特定的本地网络接口。我看到一些关于 SO_BINDTODEVICE socket选项以及来自早期文章或其他站点的bind函数。

    在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 回复  |  直到 8 年前
        1
  •  8
  •   Sam Miller    14 年前

    可以使用适当的 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
                );
    }