【问题标题】:Finding interface on a UDP socket在 UDP 套接字上查找接口
【发布时间】:2012-03-22 14:26:12
【问题描述】:

我有一个应用程序,我在其中使用 SO_BINDTODEVICE 将一个套接字绑定到几个传出接口。

现在的问题是当我收到响应时,我需要知道它来自哪个接口。仅响应来自的 ip 地址是不够的,因为同一个 ip 绑定到多个接口。

我使用了 stackoverflow 问题中提供的以下代码。但它在 for 循环的第二次迭代中未能给出分段错误(第一次迭代进入循环的 continue 部分)。

有人可以帮忙吗?

C++ DGRAM socket get the RECEIVER address

How to tell which interface the socket received the message from?

【问题讨论】:

  • 什么是操作系统?你是在 TCP 或 UDP 套接字上尝试这个吗?
  • Linux (POSIX API)。这是一个udp套接字。虽然现在问题已经解决了。看来我必须在创建套接字后立即设置 IP_PKTINFO 选项。如果我稍后在接收调用之前这样做,它总是返回接口索引 0。在此期间,套接字也用于发送数据,然后被添加到选择描述符集以进行接收。

标签: sockets


【解决方案1】:

问题已解决。 IP_PKTINFO 选项应该在创建套接字之后立即设置,然后再使用套接字,它可以正常工作。

在我的情况下,我在创建后使用套接字发送数据,然后将数据添加到选择描述符集以供读取。最后,在调用接收之前,我设置了 IP_PKTINFO,它总是返回接口索引 0。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-02
    • 2014-02-06
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多