auf nicht-blockierenden UNIX soket mit SO_SNDBUF senden I nonblocking UNIX UDP-Sockets verwenden, um Daten von einem Prozess zu einem anderen zu übertragen:BlockingIOError wenn
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)
Und ich Daten an Remote-Prozess oft senden:
audio_s.sendto(data, REMOTE_SOCKET_PATH)
Aber manchmal (sehr selten) fange ich BlockingIOError: [Errno 11] Resource temporarily unavailable
auf sendto
Anruf. Welcher Grund kann dafür sein? Resource temporarily unavailable
sieht wie sehr generischer Satz aus.
- Ist es möglich, detailliertere Informationen zu erhalten? Zum Beispiel: Sendepuffer übergelaufen vom Empfangspufferüberlauf? Sind diese möglichen Gründe? oder nur 1 von ihnen?
- Kann ich die aktuelle Datagrammanzahl im Sende-/Empfangspuffer kontrollieren?
- Was ist der richtige Weg, um diese Situation zu verarbeiten oder zu vermeiden?
Wenn ich entfernen Linie mit:
audio_s.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, 5500000)
es funktioniert ohne diese Ausnahme