2012-02-20 176 views
2

我有一个应用程序,我使用SO_BINDTODEVICE将一个套接字绑定到一个传出接口。在UDP套接字上查找接口

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

我已经使用下面的代码在提供的stackoverflow问题。但是它在for循环的第二次迭代中没有给出分段错误(第一次迭代继续进入循环的一部分)。

有人可以帮忙吗?

C++ DGRAM socket get the RECEIVER address

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

+0

什么是操作系统?你是在TCP还是UDP套接字上试试这个? – EdwardH 2012-02-20 21:00:13

+0

Linux(POSIX API)。这是一个udp套接字。虽然现在问题解决了。看来我必须在创建套接字后立即设置IP_PKTINFO选项。如果我在接收调用之前执行它,它总是返回接口索引0。在此期间,套接字也用于发送数据,然后将其添加到选择描述符集以供接收。 – fayyazkl 2012-02-21 21:45:28

+0

可能重复[如何确定套接字收到消息的接口?](http://stackoverflow.com/questions/603577/how-to-tell-which-interface-the-socket-received-the-message -从) – 2013-10-26 18:21:17

回答

0

的问题得到解决。 IP_PKTINFO选项应在套接字创建之后立即设置,然后再使用任何其他套接字,并且工作正常。

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