New GitHub issue #119711 from lschoe:<br>

<hr>

<pre>
# Bug report

### Bug description:

A problem occurs with the Windows proactor event loop when creating a datagram endpoint with `local_addr=None`. The problem does not occur with the selector event loop (either on Windows or Linux).

 ```python
import socket
import asyncio

class MyDatagramProto(asyncio.DatagramProtocol):

    def error_received(self, exc):
        raise exc


asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
loop = asyncio.new_event_loop()
coro = loop.create_datagram_endpoint(MyDatagramProto, local_addr=None, family=socket.AF_INET)
loop.run_until_complete(coro)

print('No problem with selector loop.')
print()

asyncio.set_event_loop_policy(asyncio.WindowsProactorEventLoopPolicy())
loop = asyncio.new_event_loop()
coro = loop.create_datagram_endpoint(MyDatagramProto, local_addr=None, family=socket.AF_INET)
loop.run_until_complete(coro)

print()
print('We got error 10022 with proactor loop.')
```
gives as output
```
No problem with selector loop.

Exception in callback _ProactorDatagramTransport._loop_reading()
handle: <Handle _ProactorDatagramTransport._loop_reading()>
Traceback (most recent call last):
  File "C:\Users\Berry\AppData\Local\Programs\Python\Python313\Lib\asyncio\events.py", line 89, in _run
    self._context.run(self._callback, *self._args)
 ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Berry\AppData\Local\Programs\Python\Python313\Lib\asyncio\proactor_events.py", line 577, in _loop_reading
    self._protocol.error_received(exc)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^
  File "C:\Users\Berry\Desktop\scratch\bugasynciolocaddrNone.py", line 7, in error_received
    raise exc
  File "C:\Users\Berry\AppData\Local\Programs\Python\Python313\Lib\asyncio\proactor_events.py", line 574, in _loop_reading
    self._read_fut = self._loop._proactor.recvfrom(self._sock,
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
 self.max_size)
 ^^^^^^^^^^^^^^
  File "C:\Users\Berry\AppData\Local\Programs\Python\Python313\Lib\asyncio\windows_events.py", line 513, in recvfrom
    ov.WSARecvFrom(conn.fileno(), nbytes, flags)
 ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
OSError: [WinError 10022] An invalid argument was supplied

We got error 10022 with proactor loop.
```
The problem happens because the socket `conn` is not bound when `WSARecvFrom` is called. The `bind()` call is skipped because the local address was `None`, see:
https://github.com/python/cpython/blob/86d1a1aa8841ea182eaf434ae6b942b3e93f58db/Lib/asyncio/base_events.py#L1440-L1441

The code above is a stripped down version of the following uvloop test case:
https://github.com/MagicStack/uvloop/blob/6c770dc3fbdd281d15c2ad46588c139696f9269c/tests/test_udp.py#L141-L160
This test passes on Linux both with the uvloop and with the asyncio (selector) loop.

### CPython versions tested on:

3.8, 3.9, 3.10, 3.11, 3.12, 3.13

### Operating systems tested on:

Windows
</pre>

<hr>

<a href="https://github.com/python/cpython/issues/119711">View on GitHub</a>
<p>Labels: type-bug</p>
<p>Assignee: </p>