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): ...@@ -311,6 +311,15 @@ class socket(object):
raise raise
self._wait(self._read_event) 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): def recvfrom(self, *args):
while True: while True:
try: try:
...@@ -393,6 +402,20 @@ class socket(object): ...@@ -393,6 +402,20 @@ class socket(object):
return 0 return 0
raise 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): def setblocking(self, flag):
if flag: if flag:
self.timeout = None 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