Skip to content

Commit

Permalink
gh-114887 Reject only sockets of type SOCK_STREAM in create_datagram_…
Browse files Browse the repository at this point in the history
…endpoint() (#114893)

Also improve exception message.

Co-authored-by: Donghee Na <donghee.na92@gmail.com>
  • Loading branch information
tjhowse and corona10 committed Feb 3, 2024
1 parent 6b53d5f commit 94ec2b9
Show file tree
Hide file tree
Showing 3 changed files with 5 additions and 3 deletions.
4 changes: 2 additions & 2 deletions Lib/asyncio/base_events.py
Expand Up @@ -1340,9 +1340,9 @@ async def create_datagram_endpoint(self, protocol_factory,
allow_broadcast=None, sock=None):
"""Create datagram connection."""
if sock is not None:
if sock.type != socket.SOCK_DGRAM:
if sock.type == socket.SOCK_STREAM:
raise ValueError(
f'A UDP Socket was expected, got {sock!r}')
f'A datagram socket was expected, got {sock!r}')
if (local_addr or remote_addr or
family or proto or flags or
reuse_port or allow_broadcast):
Expand Down
2 changes: 1 addition & 1 deletion Lib/test/test_asyncio/test_base_events.py
Expand Up @@ -1232,7 +1232,7 @@ def test_create_datagram_endpoint_wrong_sock(self):
with sock:
coro = self.loop.create_datagram_endpoint(MyProto, sock=sock)
with self.assertRaisesRegex(ValueError,
'A UDP Socket was expected'):
'A datagram socket was expected'):
self.loop.run_until_complete(coro)

def test_create_connection_no_host_port_sock(self):
Expand Down
@@ -0,0 +1,2 @@
Changed socket type validation in :meth:`~asyncio.loop.create_datagram_endpoint` to accept all non-stream sockets.
This fixes a regression in compatibility with raw sockets.

0 comments on commit 94ec2b9

Please sign in to comment.