2012-07-12 9 views
16

を否定し、私は放送でいくつかのデータを送信したい:Pythonのsocket.errorが:[errnoを13]パーミッションは、LinuxやPythonを使用して

d = b'109u433279423423423'  

import socket 

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

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

私はルートの下に、このスクリプトを起動すると、このエラーが発生します。

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

どうしたのですか?

答えて

27

ブロードキャストアドレスに送信しようとしています。

EACCES(UDPソケットの場合)ユニキャストアドレスであるかのようにネットワーク/ブロードキャストアドレスに送信しようとしましたが、sendto(2)のmanページを参照してください。

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

ありがとう:あなたが実際にブロードキャストアドレスに送信することを意味している場合

は、SO_BROADCASTオプションを設定します。奇妙なことに、Windowsで正しく動作する – atomAltera

+6

これはWindows上では常にそうです:strange – fork0

+0

UNIX仕様:sendto - ソケットでメッセージを送信します:http://pubs.opengroup.org/onlinepubs/009695399/functions/sendto.html – fork0

関連する問題