【发布时间】: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