Skip to content

Commit

Permalink
Fixed setsockopt() calling the underlying method in the wrong manner
Browse files Browse the repository at this point in the history
  • Loading branch information
agronholm committed Feb 16, 2019
1 parent 4aa87e8 commit b383275
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 9 deletions.
12 changes: 6 additions & 6 deletions anyio/_networking.py
Original file line number Diff line number Diff line change
Expand Up @@ -219,8 +219,8 @@ async def close(self):
def getsockopt(self, level, optname, *args):
return self._socket.getsockopt(level, optname, *args)

def setsockopt(self, level, optname, value, optlen: Optional[int] = None) -> None:
self._socket.setsockopt(level, optname, value, optlen)
def setsockopt(self, level, optname, value, *args) -> None:
self._socket.setsockopt(level, optname, value, *args)

@property
def buffered_data(self) -> bytes:
Expand Down Expand Up @@ -371,8 +371,8 @@ async def close(self) -> None:
def getsockopt(self, level, optname, *args):
return self._socket.getsockopt(level, optname, *args)

def setsockopt(self, level, optname, value, optlen: Optional[int] = None) -> None:
self._socket.setsockopt(level, optname, value, optlen)
def setsockopt(self, level, optname, value, *args) -> None:
self._socket.setsockopt(level, optname, value, *args)

@property
def address(self) -> Union[Tuple[str, int], Tuple[str, int, int, int], str]:
Expand Down Expand Up @@ -427,8 +427,8 @@ def port(self) -> int:
def getsockopt(self, level, optname, *args):
return self._socket.getsockopt(level, optname, *args)

def setsockopt(self, level, optname, value, optlen: Optional[int] = None) -> None:
self._socket.setsockopt(level, optname, value, optlen)
def setsockopt(self, level, optname, value, *args) -> None:
self._socket.setsockopt(level, optname, value, *args)

async def receive(self, max_bytes: int) -> Tuple[bytes, str]:
return await self._socket.recvfrom(max_bytes)
Expand Down
6 changes: 3 additions & 3 deletions anyio/abc.py
Original file line number Diff line number Diff line change
Expand Up @@ -377,7 +377,7 @@ def getsockopt(self, level, optname, *args):
"""

@abstractmethod
def setsockopt(self, level, optname, value, optlen: Optional[int] = None) -> None:
def setsockopt(self, level, optname, value, *args) -> None:
"""
Set a socket option.
Expand Down Expand Up @@ -507,7 +507,7 @@ def getsockopt(self, level, optname, *args):
"""

@abstractmethod
def setsockopt(self, level, optname, value, optlen: Optional[int] = None) -> None:
def setsockopt(self, level, optname, value, *args) -> None:
"""
Set a socket option.
Expand Down Expand Up @@ -580,7 +580,7 @@ def getsockopt(self, level, optname, *args):
"""

@abstractmethod
def setsockopt(self, level, optname, value, optlen: Optional[int] = None) -> None:
def setsockopt(self, level, optname, value, *args) -> None:
"""
Set a socket option.
Expand Down
4 changes: 4 additions & 0 deletions docs/versionhistory.rst
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@ Version history

This library adheres to `Semantic Versioning <http://semver.org/>`_.

**UNRELEASED**

- Fixed ``setsockopt()`` passing options to the underlying method in the wrong manner

**1.0.0b2**

- Added introspection of running tasks via ``anyio.get_running_tasks()``
Expand Down
15 changes: 15 additions & 0 deletions tests/test_networking.py
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,15 @@ async def server():

assert lines == {b'client1', b'client2'}

@pytest.mark.anyio
async def test_socket_options(self):
async with await create_tcp_server(interface='localhost') as stream_server:
stream_server.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 80000)
assert stream_server.getsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF) in (80000, 160000)
async with await connect_tcp('localhost', stream_server.port) as client:
client.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 80000)
assert client.getsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF) in (80000, 160000)


class TestUNIXStream:
@pytest.mark.skipif(sys.platform == 'win32',
Expand Down Expand Up @@ -421,3 +430,9 @@ async def serve():
await client.send(b'123456')
assert await client.receive(100) == (b'654321', ('127.0.0.1', server.port))
await tg.cancel_scope.cancel()

@pytest.mark.anyio
async def test_socket_options(self):
async with await create_udp_socket(interface='127.0.0.1') as udp:
udp.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 80000)
assert udp.getsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF) in (80000, 160000)

0 comments on commit b383275

Please sign in to comment.