2011-08-28 98 views

回答

4

如果你不理解的錯誤消息,這意味着你要引用一個名稱IN,該點不可用。您的代碼段可能缺少import聲明。

由於可移植性原因,套接字模塊可能不提供SO_BINDTODEVICE。如果你有絕對的把握,你在Linux上支持它運行,嘗試用它代替它的數值,這是25

s.setsockopt(socket.SOL_SOCKET, 25, "eth1"+'\0') 

或者爲Python 3:

s.setsockopt(socket.SOL_SOCKET, 25, str("eth1" + '\0').encode('utf-8')) 
+1

我習慣了C,並想嘗試在python中做這件事。將我的導入語句更改爲「導入套接字,IN」修復了它。 – user916499

+0

如果您不直接使用套接字模塊,則可以按照http://stackoverflow.com/questions/12585317/requests-bind-to-an-ip –

+0

中所述使用猴子修補程序。IN模塊在Linux平臺上是標準的。它包含'/ usr/include/netinet/in.h'中的大部分常量。果然,該文件中的SO_BINDTODEVICE設置爲25。 –

0

,你甚至可以「出口」 缺少選項:

if not hasattr(socket,'SO_BINDTODEVICE') : 
    socket.SO_BINDTODEVICE = 25 

然後

sock.setsockopt(socket.SOL_SOCKET, socket.SO_BINDTODEVICE, interface+'\0') 
相關問題