【发布时间】:2011-03-04 12:08:23
【问题描述】:
我正在写一个UPnP AV/DLNA DMS,它需要发送和接收SSDP 消息。为了响应一些M-SEARCH 数据包,我需要发送带有资源(在本例中为HTTP 服务器)的URL 的回复,我选择将其绑定到INADDR_ANY (0.0.0.0)。当然这个地址对于M-SEARCH包的发送者来说是没有意义的:接收M-SEARCH的接口地址是最合适的。
如何确定要在回复包中发送的适当地址?
我考虑过的一些想法是:
- 将不同的接收器绑定到每个套接字。当接收方收到
M-SEARCH数据包时,回复地址可以在回复中使用套接字的本地地址。但是,这需要了解和迭代所有接口,并随着接口可用性的变化添加和删除接收器。 - 在
INADDR_ANY上放置一个接收器,并迭代接口网络掩码以确定可能的来源。但是,多个接口可能共享同一个子网。 - 在收到数据包时提取 IP 目标地址。这将是特定于 IP 的,并且可能会在网络抽象的某个地方丢失。
【问题讨论】:
标签: linux upnp dlna network-interface ssdp