2016-05-18 8 views
0

Я использую неблокирующий сокет UNIX UDP для передачи данных от одного процесса к другому:BlockingIOError когда отправить неблокируемом UNIX Soket с SO_SNDBUF

audio_s = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM) 
audio_s.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 5500000) 
audio_s.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, 5500000) 
audio_s.setblocking(0) 
try: 
    os.remove(SOCKET_PATH) 
except FileNotFoundError as e: 
    pass 
audio_s.bind(SOCKET_PATH) 

И я часто отправлять данные на удаленный процесс:

audio_s.sendto(data, REMOTE_SOCKET_PATH) 

Но иногда (очень редко) Я улавлю BlockingIOError: [Errno 11] Resource temporarily unavailable по телефону sendto. Какая причина может быть для этого? Resource temporarily unavailable выглядит очень универсальным предложением.

  1. Возможно ли узнать более подробную информацию? Например, переполнение буфера переполнения удаленного буфера приема? Возможны ли эти причины? или только 1 из них?
  2. Могу ли я контролировать текущее количество дейтаграмм в буфере отправки/получения?
  3. Что такое правильный способ обработки или избежания этой ситуации?

Если удалить строку с:

audio_s.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, 5500000) 

работает без этого исключения

ответ

 Смежные вопросы

  • Нет связанных вопросов^_^