def _async_recv(self, bufsize, *args):
"""Internal use only; use 'recv' with 'yield' instead.
Asynchronous version of socket recv method.
"""
def _recv():
try:
buf = self._rsock.recv(bufsize, *args)
except:
self._read_fn = None
self._notifier.clear(self, _AsyncPoller._Read)
self._read_task.throw(*sys.exc_info())
else:
self._read_fn = None
self._notifier.clear(self, _AsyncPoller._Read)
self._read_task._proceed_(buf)
if not self._scheduler:
self._scheduler = Pycos.scheduler()
self._notifier = self._scheduler._notifier
self._register()
self._read_task = Pycos.cur_task(self._scheduler)
self._read_task._await_()
self._read_fn = _recv
self._notifier.add(self, _AsyncPoller._Read)
if self._certfile and self._rsock.pending():
try:
buf = self._rsock.recv(bufsize, *args)
except:
self._read_fn = None
self._notifier.clear(self, _AsyncPoller._Read)
self._read_task.throw(*sys.exc_info())
else:
if buf:
self._read_fn = None
self._notifier.clear(self, _AsyncPoller._Read)
self._read_task._proceed_(buf)
评论列表
文章目录