Я использую неблокирующий сокет 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 из них?
- Могу ли я контролировать текущее количество дейтаграмм в буфере отправки/получения?
- Что такое правильный способ обработки или избежания этой ситуации?
Если удалить строку с:
audio_s.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, 5500000)
работает без этого исключения