以下代码在我的Macbook上(运行OS X 10.10.5)会导致错误:
error: [Errno 40] Message too long
。import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
sock.sendto('a'*1473, ('<broadcast>', 9999))
当消息长度为1473或更长时,我会收到error: [Errno 40] Message too long
的错误提示。
但是,如果我将'<broadcast>'
更改为'localhost'
或任何非广播IP,则长度超过1472的消息可以正常传输。
我在Ubuntu和CentOS上进行了相同的实验。在这两台机器上,我都没有收到error: [Errno 40] Message too long
的错误消息。
两个问题:
为什么OS X会表现出这种行为?
是否有可能增加OS X的广播限制?
sudo sysctl -w net.inet.udp.maxdgram=65535
- undefined