MCPcopy
hub / github.com/benoitc/gunicorn / _read_exact

Method _read_exact

gunicorn/asgi/websocket.py:344–363  ·  view source on GitHub ↗

Read exactly n bytes from internal buffer. Waits for data via the callback-fed buffer instead of StreamReader.

(self, n)

Source from the content-addressed store, hash-verified

342 return (opcode, payload)
343
344 async def _read_exact(self, n):
345 """Read exactly n bytes from internal buffer.
346
347 Waits for data via the callback-fed buffer instead of StreamReader.
348 """
349 while len(self._buffer) < n:
350 if self._eof:
351 return None
352 self._data_event.clear()
353 # Critical: check buffer AGAIN after clearing to avoid race
354 # condition where data arrives between clear() and wait()
355 if len(self._buffer) >= n:
356 break
357 await self._data_event.wait()
358 if self._eof and len(self._buffer) < n:
359 return None
360
361 data = bytes(self._buffer[:n])
362 del self._buffer[:n]
363 return data
364
365 def _unmask(self, payload, masking_key):
366 """Unmask WebSocket payload data."""

Callers 1

_read_frameMethod · 0.95

Calls 2

clearMethod · 0.45
waitMethod · 0.45

Tested by

no test coverage detected