2012-07-12 13 views
16

Korzystanie Linux i Python, chcę wysłać jakieś dane z transmisji:Python socket.error: [ERRNO 13] Permission denied

d = b'109u433279423423423'  

import socket 

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

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

I uruchomić ten skrypt pod korzeń i uzyskać ten błąd:

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

Co jest nie tak?

Odpowiedz

27

Próbujesz wysłać na adres broadcast. Niedopuszczalne jest, zobacz stronę podręcznika dla sendto (2):

EACCES (dla gniazd UDP) Podjęto próbę, aby wysłać do sieci/adres broadcast, jakby to był adres unicast.

Ustaw opcję SO_BROADCAST, jeśli właściwie znaczy wysłać na adres broadcast:

s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) 
+1

Dzięki. Dziwne, że to działa poprawnie na Windows – atomAltera

+6

To jest zawsze tak na oknach: dziwnych – fork0

+0

specyfikacji UNIX: sendto - wyślij wiadomość na gnieździe: http://pubs.opengroup.org/onlinepubs/009695399/functions/sendto.html – fork0

Powiązane problemy