2015-05-26 27 views
1

我根據插座:現在Python的套接字綁定0.0.0.0,檢查傳入消息

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。

+0

Possibily相關 - [如何知道哪些接口該套接字收到消息?](http://stackoverflow.com/questions/603577/how-to-tell-which-interface-the-socket-received-the-message-from) – jweyrich

回答

1

你不能。如果要分別綁定到每個IP地址(這將爲每個接口打開一個套接字),您只能區分這些接口。

編輯:作爲@jweyrich在下面的評論中指出,Windows上的套接字選項叫做IP_PKTINFO(當然Linux also)可以提供的信息 - 如果它實現

+0

你可以嚴格地談論UDP - 參見[IP_PKTINFO](http://linux.die.net/man/7/ip) – jweyrich

+0

@jweyrich不是每個人都使用linux ... – knitti

+0

的確,我的不好 - [對於windows](https:// msdn。 microsoft.com/en-us/library/windows/desktop/hh285668%28v=vs.85% 29.aspx) - 只是不確定這會對Python的套接字抽象起作用 - 我沒有閱讀代碼來知道它是否在內部使用'WSARecvMsg'。 – jweyrich