greenio: Fix "TypeError: an integer is required" in sendto()
The sendto() interface as defined in Python documentation: socket.sendto(string, address) socket.sendto(string, flags, address) I didn't catch the fact that [1] broke this, this patch fixes it and add a sendto/recvfrom test to make sure it doesn't happen again (turns out we didn't have any). GitHub issue: https://github.com/eventlet/eventlet/issues/290 Fixes:bc4d1b5
- gh-274: Handle blocking I/O errors in GreenSocket [1]bc4d1b5d36
This commit is contained in:
@@ -376,8 +376,8 @@ class GreenSocket(object):
|
|||||||
def send(self, data, flags=0):
|
def send(self, data, flags=0):
|
||||||
return self._send_loop(self.fd.send, data, flags)
|
return self._send_loop(self.fd.send, data, flags)
|
||||||
|
|
||||||
def sendto(self, data, address, flags=0):
|
def sendto(self, data, *args):
|
||||||
return self._send_loop(self.fd.sendto, data, address, flags)
|
return self._send_loop(self.fd.sendto, data, *args)
|
||||||
|
|
||||||
def sendall(self, data, flags=0):
|
def sendall(self, data, flags=0):
|
||||||
tail = self.send(data, flags)
|
tail = self.send(data, flags)
|
||||||
|
@@ -593,6 +593,21 @@ class TestGreenSocket(tests.LimitedTestCase):
|
|||||||
# should not raise
|
# should not raise
|
||||||
greenio.shutdown_safe(sock)
|
greenio.shutdown_safe(sock)
|
||||||
|
|
||||||
|
def test_datagram_socket_operations_work(self):
|
||||||
|
receiver = greenio.GreenSocket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||||
|
receiver.bind(('127.0.0.1', 0))
|
||||||
|
address = receiver.getsockname()
|
||||||
|
|
||||||
|
sender = greenio.GreenSocket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||||
|
|
||||||
|
# Two ways sendto can be called
|
||||||
|
sender.sendto(b'first', address)
|
||||||
|
sender.sendto(b'second', 0, address)
|
||||||
|
|
||||||
|
sender_address = ('127.0.0.1', sender.getsockname()[1])
|
||||||
|
eq_(receiver.recvfrom(1024), (b'first', sender_address))
|
||||||
|
eq_(receiver.recvfrom(1024), (b'second', sender_address))
|
||||||
|
|
||||||
|
|
||||||
def test_get_fileno_of_a_socket_works():
|
def test_get_fileno_of_a_socket_works():
|
||||||
class DummySocket(object):
|
class DummySocket(object):
|
||||||
|
Reference in New Issue
Block a user