Python socket.error: [Errno 13] Permission denied
Asked Answered
S

1

21

Using Linux and Python, I want to send some data with broadcast:

d = b'109u433279423423423'    

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

s.sendto(d, 0, ('192.168.0.255', 9))

I launch this script under root and get this error:

s.sendto(d, 0, ('192.168.0.255', 9)) socket.error: [Errno 13]
Permission denied

What is wrong?

Selfabsorption answered 12/7, 2012 at 17:52 Comment(0)
I
38

You are trying to send to a broadcast address. It is not allowed, see manpage for sendto(2):

EACCES (For UDP sockets) An attempt was made to send to a network/broadcast address as though it was a unicast address.

Set the SO_BROADCAST option, if you actually mean to send to a broadcast address:

s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
Itu answered 12/7, 2012 at 19:46 Comment(2)
It is always like this on Windows: strangeItu
UNIX specs: sendto - send a message on a socket: pubs.opengroup.org/onlinepubs/009695399/functions/sendto.htmlItu

© 2022 - 2024 — McMap. All rights reserved.