2012-07-12 811 views
16

Sử dụng Linux và Python, tôi muốn gửi một số dữ liệu với phát sóng: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)) 

tôi khởi động kịch bản này dưới gốc và nhận được lỗi này:

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

Điều gì là sai?

Trả lời

27

Bạn đang cố gửi tới địa chỉ quảng bá. Không được phép, xem manpage cho sendto (2):

EACCES (Đối với ổ cắm UDP) Đã cố gắng gửi đến địa chỉ mạng/phát sóng như thể đó là địa chỉ unicast.

Đặt tùy chọn SO_BROADCAST, nếu bạn thực sự có ý nghĩa để gửi đến một địa chỉ phát sóng:

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

Cảm ơn. Thật lạ khi nó hoạt động bình thường trên Windows – atomAltera

+6

Nó luôn giống như thế này trên Windows: lạ – fork0

+0

Thông số kỹ thuật UNIX: sendto - gửi một thông điệp trên một socket: http://pubs.opengroup.org/onlinepubs/009695399/functions/sendto.html – fork0