2012-07-12 19 views
16

Utilizzo di Linux e Python, voglio inviare alcuni dati con la trasmissione:Python socket.error: [Errno 13] Permesso negato

d = b'109u433279423423423'  

import socket 

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

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

io lancio questo script sotto root e ottenere questo errore:

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

Cosa c'è che non va?

risposta

27

Si sta tentando di inviare a un indirizzo di trasmissione. Non è consentito, vedi pagina di manuale per sendto (2):

EACCES (per socket UDP) Un tentativo è stato fatto per inviare ad un/indirizzo di trasmissione della rete come se fosse un indirizzo unicast.

Impostare l'opzione SO_BROADCAST, se effettivamente intenzione di inviare a un indirizzo di broadcast:

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

Grazie. Strano che funzioni correttamente su Windows – atomAltera

+6

È sempre così su Windows: strano – fork0

+0

specifiche UNIX: sendto - invia un messaggio su un socket: http://pubs.opengroup.org/onlinepubs/009695399/functions/sendto.html – fork0

Problemi correlati