2011-08-28 181 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')