Следующий код приведет к error: [Errno 40] Message too long
на моем MacBook (под управлением ОС X 10.10.5)OS X UDP вещания максимальный размер пакета
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))
я получаю error: [Errno 40] Message too long
для любого сообщения 1473 или более.
Однако, если я изменю '<broadcast>'
на 'localhost'
или на любой нерансетированный IP, сообщения длиннее 1472 пройдут через штраф.
Я сделал этот же эксперимент на Ubuntu и CentOS. Я не получаю сообщение error: [Errno 40] Message too long
на любой из этих машин.
Два вопроса:
Почему OS X ведет себя так?
Можно ли увеличить лимит вещания на OS X?
Возможно, MTU на вашем сетевом адаптере составляет 1500, который после учета заголовков и т. Д. Разрешает только полезную нагрузку UDP-сообщения 1473. UDP не будет разделять сообщения для вас. С другой стороны, ваш loopback-интерфейс обычно имеет гораздо более высокий MTU (64k на моей Linux-системе). – twalberg
@twalberg hmmm. Если я изменил «» на любой другой IP-адрес, он отлично работает. Любые другие мысли? –
Stephen