c++ - 使用UDP套接字发送时如何设置源地址

标签 c++ linux sockets udp

我有两台电脑使用 VRRP 实现冗余。所以每台 PC (Linux) 都有一个物理 IP 地址和一个虚拟 IP 地址。

我有一个带有 UDP 协议(protocol)的客户端/服务器架构的软件 (C++)。该软件在“0.0.0.0”上绑定(bind)监听套接字,每次需要向对方发送一些数据时使用一个新的套接字。使用 wireshark,我看到当它发送数据时,源 IP 是物理 IP... 如何将发送套接字的源地址设置为虚拟套接字??

注意:在 ifconfig 中我只看到带有物理地址的 eth0...

最佳答案

当内核需要通过套接字发送一些东西时,它会执行这些步骤

  • 如果套接字已绑定(bind),则使用该源地址
  • 是套接字未绑定(bind),它四处寻找接口(interface)并选择一个源地址

所以你需要 bind(2) 你的套接字到你想要的地址。更多信息: "Source Address Selection" in chapter "IP Routing" of "Guide to IP Layer Network Administration with Linux" .

关于c++ - 使用UDP套接字发送时如何设置源地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5755265/

相关文章:

c++ - 从 lambda 中调用基本成员函数时出错

android - adb 不显示 nexus 5 设备

linux - 我挂载的 EBS 卷没有显示

python - 使用 sudo 在 Python 3.6 中导入错误?

c++ - Memset 似乎卡住了我的程序 C++ 和其他我没有看到的问题

Java 套接字 - 本地端口

c++ - C++ 中有 "generics-like"功能吗?

c++ - 在程序启动时自动执行代码而不违反 ODR

c++ - 这个函数有什么作用?

c - 如何在 C 中获取事件网络接口(interface)的列表?