Commit 7b3f3501 authored by Jakub Klama's avatar Jakub Klama Committed by Jason Madden

Make socket.recvmsg() and socket.sendmsg() cooperative.

parent a2b95091
......@@ -311,6 +311,15 @@ class socket(object):
raise
self._wait(self._read_event)
def recvmsg(self, *args):
while True:
try:
return _socket.socket.recvmsg(self._sock, *args)
except error as ex:
if ex.args[0] != EWOULDBLOCK or self.timeout == 0.0:
raise
self._wait(self._read_event)
def recvfrom(self, *args):
while True:
try:
......@@ -393,6 +402,20 @@ class socket(object):
return 0
raise
def sendmsg(self, *args):
try:
return _socket.socket.sendmsg(self._sock, *args)
except error as ex:
if ex.args[0] != EWOULDBLOCK or self.timeout == 0.0:
raise
self._wait(self._write_event)
try:
return _socket.socket.sendmsg(self._sock, *args)
except error as ex2:
if ex2.args[0] == EWOULDBLOCK:
return 0
raise
def setblocking(self, flag):
if flag:
self.timeout = None
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment