Python套接字绑定0.0.0.0,检查传入消息

Python套接字绑定0.0.0.0,检查传入消息,python,sockets,Python,Sockets,我有一个插座,根据: self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.socket.bind(('0.0.0.0', 67)) # Listen o

我有一个插座,根据:

self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.socket.bind(('0.0.0.0', 67)) # Listen on port 67
现在,套接字监听端口67上的所有接口。我等待一些消息:

message, address = self.socket.recvfrom(8192) # Blocking
收到消息后,我希望在接收消息的同一接口上的端口68发送广播响应

问题是:是否有某种方法可以检查消息并确定接收消息的网络接口,如果是,如何发送响应并提供该接口进行传输


在Windows、Python 3.4上运行。

您不能。只有分别绑定到每个IP地址(这将为每个接口打开一个套接字),才能区分接口


编辑:正如@jweyrich在下面的评论中指出的那样,在Windows上,一个名为(当然)的套接字选项可以提供信息-如果它实现了

可能相关-你可以,严格地说是UDP-确实可以看到,我不好——只是不确定这是否能在Python的套接字抽象上工作——我还没有阅读代码,不知道它是否在内部使用了
wsarecvmg
。OpenBSD没有,NetBSD有问题(),OSX没有上次看(10.7),IOS。。。。OP在Windows上运行,如果他不关心可移植性,socket选项可能会解决问题-但我怀疑Python的实现是否在Windows内部使用了
wsarecvmg
。@jweyrich,谢谢,我错过了这一部分,这实际上是我的错。如果你不将此作为答案发布,我将在几分钟内更新我自己的答案。