python`IN`模块问题(FreeBSD)

2024-05-29 03:32:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试着用插座,我遇到了这样的问题

在代码示例中:

setsockopt(socket.SOL_SOCKET,IN.SO_BINDTODEVICE,self.listen_address+'\0')

我有错误

^{pr2}$

在Linux机器上,这个属性是可以的,但是在FreeBSD树上,模块IN中没有任何sou*属性。我应该安装什么端口来解决FreeBDS机器上的这个问题?在

Linux上的Python版本测试: 2.5.4和2.6.4; 在FreeBSD上: 2.5.5款

我在我的书中找不到关于这个模块的任何信息,而且google关键字IN看起来是无缝的。。。在

更新:

我只能绑定到地址,不能绑定到设备。在

>>> import socket
>>> s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
>>> s.bind(("eth0",3040))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1, in bind
socket.gaierror: [Errno -2] Name or service not known
>>> s.bind(("192.168.33.152",3040))
>>> s.close()

更新2:

。。。但我在处理广播数据包。我正在尝试编写一个类似DHCP服务器的守护进程。 如果我绑定到地址,我会捕获广播包吗?如果我把滥交模式打开?在


Tags: 模块代码in机器示例属性bindlinux
1条回答
网友
1楼 · 发布于 2024-05-29 03:32:38

SO_BINDTODEVICE套接字选项不是标准选项,在FreeBSD上不受支持。为什么不能使用常规的^{}来分配本地地址/接口?在

编辑:

看看socket object docs
这是一个example。在

编辑2:

您没有说明您到底要实现什么,所以假设使用常规的TCP/IP客户机服务器。在

IP,作为一种网络层协议(与以太网相比,以太网是一种数据链路协议),与设备无关,而与地址有关。这个想法是,你不需要绑定到设备-操作系统负责将地址映射到设备,并维护一个路由表。在使用广播多播时,您只需要在套接字和设备之间建立明确的关系,而地址和接口之间的映射并不明显。在

TCP/IP堆栈已知的每个网络接口都分配了一个IP地址(请参见^{})。把你的套接字绑定到那个IP地址上,你就一切就绪了。在

希望这有帮助。在

编辑3:

你有没有研究过SO_BROADCAST选项?另请查看this SO question关于原始套接字。在

相关问题 更多 >

    热门问题