codingjoe / ssdp

Python asyncio library for Simple Service Discovery Protocol (SSDP).
https://en.wikipedia.org/wiki/Simple_Service_Discovery_Protocol
MIT License
42 stars 12 forks source link

OSError: [WinError 10022] An invalid argument was supplied #85

Open gordonaspin opened 1 year ago

gordonaspin commented 1 year ago

python --version Python 3.11.1 python .\request_msearch.py C:\Users\User\Desktop\request_msearch.py:41: DeprecationWarning: There is no current event loop loop = asyncio.get_event_loop() Exception in callback _ProactorDatagramTransport._loop_reading() handle: <Handle _ProactorDatagramTransport._loop_reading()> Traceback (most recent call last): File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\asyncio\proactor_events.py", line 578, in _loop_reading self._read_fut = self._loop._proactor.recvfrom(self._sock, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\asyncio\windows_events.py", line 503, in recvfrom ov.WSARecvFrom(conn.fileno(), nbytes, flags) OSError: [WinError 10022] An invalid argument was supplied

The above exception was the direct cause of the following exception:

Traceback (most recent call last): File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\asyncio\events.py", line 80, in _run self._context.run(self._callback, *self._args) File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\asyncio\proactor_events.py", line 581, in _loop_reading self._protocol.error_received(exc) File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\ssdp__init__.py", line 177, in error_received raise IOError("Unexpected connection error") from exc OSError: Unexpected connection error

gordonaspin commented 1 year ago

I figured out a fix. add a tuple (hostname/ip_address, None) to the loop.create_datagram_endpoint() call. This binds the socket to the address which is what Windows needs.

codingjoe commented 1 year ago

Hi @gordonaspin,

there was an issue in the previous version with Windows. This issue should be fixed in version 1.2. You can use the new CLI to test it.

Cheers! Joe

yyjdelete commented 2 months ago

The same for 1.3.0 in win10(22H2, 19045.4651) + Python 3.12.4 And add -b 192.168.xxx.xxx to bind to special ethernet and apply the workaround by gordonaspin works for me.

connect = loop.create_datagram_endpoint(PrintSSDMessageProtocol, family=family, local_addr=(bind, 0))
codingjoe commented 2 months ago

@yyjdelete I actually do have a Windows PC now. Do you have a code snipped I could use to reproduce and debug the issue?