Your message dated Sat, 21 Jan 2023 21:14:14 +0000
with message-id <e1pjlbm-00an5b...@fasolo.debian.org>
and subject line Bug#1028793: fixed in pymodbus 3.0.0-6
has caused the Debian Bug report #1028793,
regarding pymodbus: FTBFS: TypeError: BaseEventLoop.create_datagram_endpoint() 
got an unexpected keyword argument 'reuse_address'
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact ow...@bugs.debian.org
immediately.)


-- 
1028793: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1028793
Debian Bug Tracking System
Contact ow...@bugs.debian.org with problems
--- Begin Message ---
Source: pymodbus
Version: 3.0.0-5
Severity: serious
Justification: FTBFS
Tags: bookworm sid ftbfs
User: lu...@debian.org
Usertags: ftbfs-20230113 ftbfs-bookworm

Hi,

During a rebuild of all packages in sid, your package failed to build
on amd64.


Relevant part (hopefully):
> make[1]: Entering directory '/<<PKGBUILDDIR>>'
> PYTHONPATH=/<<PKGBUILDDIR>> dh_auto_test
> I: pybuild base:240: cd 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_pymodbus/build; python3.11 -m pytest 
> test
> ============================= test session starts 
> ==============================
> platform linux -- Python 3.11.1, pytest-7.2.0, pluggy-1.0.0+repack
> rootdir: /<<PKGBUILDDIR>>, configfile: setup.cfg
> plugins: cov-4.0.0, asyncio-0.20.3
> asyncio: mode=Mode.AUTO
> collected 443 items
> 
> test/test_all_messages.py ...                                            [  
> 0%]
> test/test_bit_read_messages.py .........                                 [  
> 2%]
> test/test_bit_write_messages.py .........                                [  
> 4%]
> test/test_client.py .................................................... [ 
> 16%]
> ..                                                                       [ 
> 16%]
> test/test_client_sync.py ............................                    [ 
> 23%]
> test/test_client_sync_diag.py .....                                      [ 
> 24%]
> test/test_datastore.py ...............................                   [ 
> 31%]
> test/test_device.py .....................                                [ 
> 36%]
> test/test_diag_messages.py .........                                     [ 
> 38%]
> test/test_events.py ......                                               [ 
> 39%]
> test/test_examples.py .......................FF.....F....                [ 
> 47%]
> test/test_exceptions.py .                                                [ 
> 47%]
> test/test_factory.py ...........                                         [ 
> 50%]
> test/test_file_message.py .......................                        [ 
> 55%]
> test/test_framers.py .................................................   [ 
> 66%]
> test/test_interfaces.py .....                                            [ 
> 67%]
> test/test_mei_messages.py ........                                       [ 
> 69%]
> test/test_other_messages.py .......                                      [ 
> 70%]
> test/test_payload.py .........                                           [ 
> 72%]
> test/test_pdu.py ....                                                    [ 
> 73%]
> test/test_register_read_messages.py ...........                          [ 
> 76%]
> test/test_register_write_messages.py ............                        [ 
> 79%]
> test/test_remote_datastore.py ....                                       [ 
> 79%]
> test/test_repl_client.py ..                                              [ 
> 80%]
> test/test_server_asyncio.py ....FE...........FEFEFEFEFE.FE               [ 
> 85%]
> test/test_server_context.py ...........                                  [ 
> 88%]
> test/test_transaction.py ..............................................  [ 
> 98%]
> test/test_utilities.py .....                                             [ 
> 99%]
> test/test_version.py ..                                                  
> [100%]
> 
> ==================================== ERRORS 
> ====================================
> ______ ERROR at teardown of AsyncioServerTest.test_async_start_udp_server 
> ______
> 
> self = <test.test_server_asyncio.AsyncioServerTest 
> testMethod=test_async_start_udp_server>
> 
>     async def asyncTearDown(self):
>         """Clean up the test environment"""
>         if self.server is not None:
>             await self.server.server_close()
>             self.server = None
>         if self.task is not None:
>             await asyncio.sleep(0.1)
>             if not self.task.cancelled():
>                 self.task.cancel()
>                 try:
> >                   await self.task
> E                   TypeError: BaseEventLoop.create_datagram_endpoint() got 
> an unexpected keyword argument 'reuse_address'
> 
> test/test_server_asyncio.py:142: TypeError
> ------------------------------ Captured log setup 
> ------------------------------
> DEBUG    asyncio:selector_events.py:54 Using selector: EpollSelector
> ------------------------------ Captured log call 
> -------------------------------
> DEBUG    asyncio:selector_events.py:54 Using selector: EpollSelector
> ERROR    asyncio:base_events.py:1765 Exception in callback 
> AsyncioServerTest.handle_task(<Task finishe.../tasks.py:374>)
> handle: <Handle AsyncioServerTest.handle_task(<Task finishe.../tasks.py:374>) 
> created at /usr/lib/python3.11/asyncio/events.py:80>
> source_traceback: Object created at (most recent call last):
>   File "/usr/lib/python3.11/unittest/case.py", line 623, in run
>     self._callTestMethod(testMethod)
>   File "/usr/lib/python3.11/unittest/async_case.py", line 90, in 
> _callTestMethod
>     if self._callMaybeAsync(method) is not None:
>   File "/usr/lib/python3.11/unittest/async_case.py", line 112, in 
> _callMaybeAsync
>     return self._asyncioRunner.run(
>   File "/usr/lib/python3.11/asyncio/runners.py", line 118, in run
>     return self._loop.run_until_complete(task)
>   File "/usr/lib/python3.11/asyncio/base_events.py", line 640, in 
> run_until_complete
>     self.run_forever()
>   File "/usr/lib/python3.11/asyncio/base_events.py", line 607, in run_forever
>     self._run_once()
>   File "/usr/lib/python3.11/asyncio/base_events.py", line 1911, in _run_once
>     handle._run()
>   File "/usr/lib/python3.11/asyncio/events.py", line 80, in _run
>     self._context.run(self._callback, *self._args)
> Traceback (most recent call last):
>   File "/usr/lib/python3.11/asyncio/events.py", line 80, in _run
>     self._context.run(self._callback, *self._args)
>   File 
> "/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_pymodbus/build/test/test_server_asyncio.py",
>  line 155, in handle_task
>     result = result.result()
>              ^^^^^^^^^^^^^^^
>   File 
> "/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_pymodbus/build/pymodbus/server/async_io.py",
>  line 729, in serve_forever
>     self.protocol, self.endpoint = await self.loop.create_datagram_endpoint(
>                                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> TypeError: BaseEventLoop.create_datagram_endpoint() got an unexpected keyword 
> argument 'reuse_address'
> DEBUG    asyncio:base_events.py:676 Close <_UnixSelectorEventLoop 
> running=False closed=False debug=True>
> ---------------------------- Captured log teardown 
> -----------------------------
> DEBUG    asyncio:selector_events.py:54 Using selector: EpollSelector
> ____ ERROR at teardown of AsyncioServerTest.test_async_udp_server_exception 
> ____
> 
> self = <test.test_server_asyncio.AsyncioServerTest 
> testMethod=test_async_udp_server_exception>
> 
>     async def asyncTearDown(self):
>         """Clean up the test environment"""
>         if self.server is not None:
>             await self.server.server_close()
>             self.server = None
>         if self.task is not None:
>             await asyncio.sleep(0.1)
>             if not self.task.cancelled():
>                 self.task.cancel()
>                 try:
> >                   await self.task
> E                   TypeError: BaseEventLoop.create_datagram_endpoint() got 
> an unexpected keyword argument 'reuse_address'
> 
> test/test_server_asyncio.py:142: TypeError
> ------------------------------ Captured log setup 
> ------------------------------
> DEBUG    asyncio:selector_events.py:54 Using selector: EpollSelector
> ------------------------------ Captured log call 
> -------------------------------
> DEBUG    asyncio:selector_events.py:54 Using selector: EpollSelector
> ERROR    asyncio:base_events.py:1765 Exception in callback 
> AsyncioServerTest.handle_task(<Task finishe.../tasks.py:374>)
> handle: <Handle AsyncioServerTest.handle_task(<Task finishe.../tasks.py:374>) 
> created at /usr/lib/python3.11/asyncio/events.py:80>
> source_traceback: Object created at (most recent call last):
>   File "/usr/lib/python3.11/unittest/case.py", line 623, in run
>     self._callTestMethod(testMethod)
>   File "/usr/lib/python3.11/unittest/async_case.py", line 90, in 
> _callTestMethod
>     if self._callMaybeAsync(method) is not None:
>   File "/usr/lib/python3.11/unittest/async_case.py", line 112, in 
> _callMaybeAsync
>     return self._asyncioRunner.run(
>   File "/usr/lib/python3.11/asyncio/runners.py", line 118, in run
>     return self._loop.run_until_complete(task)
>   File "/usr/lib/python3.11/asyncio/base_events.py", line 640, in 
> run_until_complete
>     self.run_forever()
>   File "/usr/lib/python3.11/asyncio/base_events.py", line 607, in run_forever
>     self._run_once()
>   File "/usr/lib/python3.11/asyncio/base_events.py", line 1911, in _run_once
>     handle._run()
>   File "/usr/lib/python3.11/asyncio/events.py", line 80, in _run
>     self._context.run(self._callback, *self._args)
> Traceback (most recent call last):
>   File "/usr/lib/python3.11/asyncio/events.py", line 80, in _run
>     self._context.run(self._callback, *self._args)
>   File 
> "/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_pymodbus/build/test/test_server_asyncio.py",
>  line 155, in handle_task
>     result = result.result()
>              ^^^^^^^^^^^^^^^
>   File 
> "/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_pymodbus/build/pymodbus/server/async_io.py",
>  line 729, in serve_forever
>     self.protocol, self.endpoint = await self.loop.create_datagram_endpoint(
>                                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> TypeError: BaseEventLoop.create_datagram_endpoint() got an unexpected keyword 
> argument 'reuse_address'
> DEBUG    asyncio:base_events.py:676 Close <_UnixSelectorEventLoop 
> running=False closed=False debug=True>
> ---------------------------- Captured log teardown 
> -----------------------------
> DEBUG    asyncio:selector_events.py:54 Using selector: EpollSelector
> __ ERROR at teardown of AsyncioServerTest.test_async_udp_server_receive_data 
> ___
> 
> self = <test.test_server_asyncio.AsyncioServerTest 
> testMethod=test_async_udp_server_receive_data>
> 
>     async def asyncTearDown(self):
>         """Clean up the test environment"""
>         if self.server is not None:
>             await self.server.server_close()
>             self.server = None
>         if self.task is not None:
>             await asyncio.sleep(0.1)
>             if not self.task.cancelled():
>                 self.task.cancel()
>                 try:
> >                   await self.task
> E                   TypeError: BaseEventLoop.create_datagram_endpoint() got 
> an unexpected keyword argument 'reuse_address'
> 
> test/test_server_asyncio.py:142: TypeError
> ------------------------------ Captured log setup 
> ------------------------------
> DEBUG    asyncio:selector_events.py:54 Using selector: EpollSelector
> ------------------------------ Captured log call 
> -------------------------------
> DEBUG    asyncio:selector_events.py:54 Using selector: EpollSelector
> ERROR    asyncio:base_events.py:1765 Exception in callback 
> AsyncioServerTest.handle_task(<Task finishe.../tasks.py:374>)
> handle: <Handle AsyncioServerTest.handle_task(<Task finishe.../tasks.py:374>) 
> created at /usr/lib/python3.11/asyncio/events.py:80>
> source_traceback: Object created at (most recent call last):
>   File "/usr/lib/python3.11/unittest/case.py", line 623, in run
>     self._callTestMethod(testMethod)
>   File "/usr/lib/python3.11/unittest/async_case.py", line 90, in 
> _callTestMethod
>     if self._callMaybeAsync(method) is not None:
>   File "/usr/lib/python3.11/unittest/async_case.py", line 112, in 
> _callMaybeAsync
>     return self._asyncioRunner.run(
>   File "/usr/lib/python3.11/asyncio/runners.py", line 118, in run
>     return self._loop.run_until_complete(task)
>   File "/usr/lib/python3.11/asyncio/base_events.py", line 640, in 
> run_until_complete
>     self.run_forever()
>   File "/usr/lib/python3.11/asyncio/base_events.py", line 607, in run_forever
>     self._run_once()
>   File "/usr/lib/python3.11/asyncio/base_events.py", line 1911, in _run_once
>     handle._run()
>   File "/usr/lib/python3.11/asyncio/events.py", line 80, in _run
>     self._context.run(self._callback, *self._args)
> Traceback (most recent call last):
>   File "/usr/lib/python3.11/asyncio/events.py", line 80, in _run
>     self._context.run(self._callback, *self._args)
>   File 
> "/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_pymodbus/build/test/test_server_asyncio.py",
>  line 155, in handle_task
>     result = result.result()
>              ^^^^^^^^^^^^^^^
>   File 
> "/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_pymodbus/build/pymodbus/server/async_io.py",
>  line 729, in serve_forever
>     self.protocol, self.endpoint = await self.loop.create_datagram_endpoint(
>                                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> TypeError: BaseEventLoop.create_datagram_endpoint() got an unexpected keyword 
> argument 'reuse_address'
> DEBUG    asyncio:base_events.py:676 Close <_UnixSelectorEventLoop 
> running=False closed=False debug=True>
> ---------------------------- Captured log teardown 
> -----------------------------
> DEBUG    asyncio:selector_events.py:54 Using selector: EpollSelector
> ____ ERROR at teardown of AsyncioServerTest.test_async_udp_server_roundtrip 
> ____
> 
> self = <test.test_server_asyncio.AsyncioServerTest 
> testMethod=test_async_udp_server_roundtrip>
> 
>     async def asyncTearDown(self):
>         """Clean up the test environment"""
>         if self.server is not None:
>             await self.server.server_close()
>             self.server = None
>         if self.task is not None:
>             await asyncio.sleep(0.1)
>             if not self.task.cancelled():
>                 self.task.cancel()
>                 try:
> >                   await self.task
> E                   TypeError: BaseEventLoop.create_datagram_endpoint() got 
> an unexpected keyword argument 'reuse_address'
> 
> test/test_server_asyncio.py:142: TypeError
> ------------------------------ Captured log setup 
> ------------------------------
> DEBUG    asyncio:selector_events.py:54 Using selector: EpollSelector
> ------------------------------ Captured log call 
> -------------------------------
> DEBUG    asyncio:selector_events.py:54 Using selector: EpollSelector
> ERROR    asyncio:base_events.py:1765 Exception in callback 
> AsyncioServerTest.handle_task(<Task finishe.../tasks.py:374>)
> handle: <Handle AsyncioServerTest.handle_task(<Task finishe.../tasks.py:374>) 
> created at /usr/lib/python3.11/asyncio/events.py:80>
> source_traceback: Object created at (most recent call last):
>   File "/usr/lib/python3.11/unittest/case.py", line 623, in run
>     self._callTestMethod(testMethod)
>   File "/usr/lib/python3.11/unittest/async_case.py", line 90, in 
> _callTestMethod
>     if self._callMaybeAsync(method) is not None:
>   File "/usr/lib/python3.11/unittest/async_case.py", line 112, in 
> _callMaybeAsync
>     return self._asyncioRunner.run(
>   File "/usr/lib/python3.11/asyncio/runners.py", line 118, in run
>     return self._loop.run_until_complete(task)
>   File "/usr/lib/python3.11/asyncio/base_events.py", line 640, in 
> run_until_complete
>     self.run_forever()
>   File "/usr/lib/python3.11/asyncio/base_events.py", line 607, in run_forever
>     self._run_once()
>   File "/usr/lib/python3.11/asyncio/base_events.py", line 1911, in _run_once
>     handle._run()
>   File "/usr/lib/python3.11/asyncio/events.py", line 80, in _run
>     self._context.run(self._callback, *self._args)
> Traceback (most recent call last):
>   File "/usr/lib/python3.11/asyncio/events.py", line 80, in _run
>     self._context.run(self._callback, *self._args)
>   File 
> "/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_pymodbus/build/test/test_server_asyncio.py",
>  line 155, in handle_task
>     result = result.result()
>              ^^^^^^^^^^^^^^^
>   File 
> "/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_pymodbus/build/pymodbus/server/async_io.py",
>  line 729, in serve_forever
>     self.protocol, self.endpoint = await self.loop.create_datagram_endpoint(
>                                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> TypeError: BaseEventLoop.create_datagram_endpoint() got an unexpected keyword 
> argument 'reuse_address'
> DEBUG    asyncio:base_events.py:676 Close <_UnixSelectorEventLoop 
> running=False closed=False debug=True>
> ---------------------------- Captured log teardown 
> -----------------------------
> DEBUG    asyncio:selector_events.py:54 Using selector: EpollSelector
> ____ ERROR at teardown of AsyncioServerTest.test_async_udp_server_send_data 
> ____
> 
> self = <test.test_server_asyncio.AsyncioServerTest 
> testMethod=test_async_udp_server_send_data>
> 
>     async def asyncTearDown(self):
>         """Clean up the test environment"""
>         if self.server is not None:
>             await self.server.server_close()
>             self.server = None
>         if self.task is not None:
>             await asyncio.sleep(0.1)
>             if not self.task.cancelled():
>                 self.task.cancel()
>                 try:
> >                   await self.task
> E                   TypeError: BaseEventLoop.create_datagram_endpoint() got 
> an unexpected keyword argument 'reuse_address'
> 
> test/test_server_asyncio.py:142: TypeError
> ------------------------------ Captured log setup 
> ------------------------------
> DEBUG    asyncio:selector_events.py:54 Using selector: EpollSelector
> ------------------------------ Captured log call 
> -------------------------------
> DEBUG    asyncio:selector_events.py:54 Using selector: EpollSelector
> ERROR    asyncio:base_events.py:1765 Exception in callback 
> AsyncioServerTest.handle_task(<Task finishe.../tasks.py:374>)
> handle: <Handle AsyncioServerTest.handle_task(<Task finishe.../tasks.py:374>) 
> created at /usr/lib/python3.11/asyncio/events.py:80>
> source_traceback: Object created at (most recent call last):
>   File "/usr/lib/python3.11/unittest/case.py", line 623, in run
>     self._callTestMethod(testMethod)
>   File "/usr/lib/python3.11/unittest/async_case.py", line 90, in 
> _callTestMethod
>     if self._callMaybeAsync(method) is not None:
>   File "/usr/lib/python3.11/unittest/async_case.py", line 112, in 
> _callMaybeAsync
>     return self._asyncioRunner.run(
>   File "/usr/lib/python3.11/asyncio/runners.py", line 118, in run
>     return self._loop.run_until_complete(task)
>   File "/usr/lib/python3.11/asyncio/base_events.py", line 640, in 
> run_until_complete
>     self.run_forever()
>   File "/usr/lib/python3.11/asyncio/base_events.py", line 607, in run_forever
>     self._run_once()
>   File "/usr/lib/python3.11/asyncio/base_events.py", line 1911, in _run_once
>     handle._run()
>   File "/usr/lib/python3.11/asyncio/events.py", line 80, in _run
>     self._context.run(self._callback, *self._args)
> Traceback (most recent call last):
>   File "/usr/lib/python3.11/asyncio/events.py", line 80, in _run
>     self._context.run(self._callback, *self._args)
>   File 
> "/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_pymodbus/build/test/test_server_asyncio.py",
>  line 155, in handle_task
>     result = result.result()
>              ^^^^^^^^^^^^^^^
>   File 
> "/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_pymodbus/build/pymodbus/server/async_io.py",
>  line 729, in serve_forever
>     self.protocol, self.endpoint = await self.loop.create_datagram_endpoint(
>                                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> TypeError: BaseEventLoop.create_datagram_endpoint() got an unexpected keyword 
> argument 'reuse_address'
> DEBUG    asyncio:base_events.py:676 Close <_UnixSelectorEventLoop 
> running=False closed=False debug=True>
> ---------------------------- Captured log teardown 
> -----------------------------
> DEBUG    asyncio:selector_events.py:54 Using selector: EpollSelector
> _ ERROR at teardown of 
> AsyncioServerTest.test_async_udp_server_serve_forever_close _
> 
> self = <test.test_server_asyncio.AsyncioServerTest 
> testMethod=test_async_udp_server_serve_forever_close>
> 
>     async def asyncTearDown(self):
>         """Clean up the test environment"""
>         if self.server is not None:
>             await self.server.server_close()
>             self.server = None
>         if self.task is not None:
>             await asyncio.sleep(0.1)
>             if not self.task.cancelled():
>                 self.task.cancel()
>                 try:
> >                   await self.task
> E                   TypeError: BaseEventLoop.create_datagram_endpoint() got 
> an unexpected keyword argument 'reuse_address'
> 
> test/test_server_asyncio.py:142: TypeError
> ------------------------------ Captured log setup 
> ------------------------------
> DEBUG    asyncio:selector_events.py:54 Using selector: EpollSelector
> ------------------------------ Captured log call 
> -------------------------------
> DEBUG    asyncio:selector_events.py:54 Using selector: EpollSelector
> ERROR    asyncio:base_events.py:1765 Exception in callback 
> AsyncioServerTest.handle_task(<Task finishe.../tasks.py:374>)
> handle: <Handle AsyncioServerTest.handle_task(<Task finishe.../tasks.py:374>) 
> created at /usr/lib/python3.11/asyncio/events.py:80>
> source_traceback: Object created at (most recent call last):
>   File "/usr/lib/python3.11/unittest/case.py", line 623, in run
>     self._callTestMethod(testMethod)
>   File "/usr/lib/python3.11/unittest/async_case.py", line 90, in 
> _callTestMethod
>     if self._callMaybeAsync(method) is not None:
>   File "/usr/lib/python3.11/unittest/async_case.py", line 112, in 
> _callMaybeAsync
>     return self._asyncioRunner.run(
>   File "/usr/lib/python3.11/asyncio/runners.py", line 118, in run
>     return self._loop.run_until_complete(task)
>   File "/usr/lib/python3.11/asyncio/base_events.py", line 640, in 
> run_until_complete
>     self.run_forever()
>   File "/usr/lib/python3.11/asyncio/base_events.py", line 607, in run_forever
>     self._run_once()
>   File "/usr/lib/python3.11/asyncio/base_events.py", line 1911, in _run_once
>     handle._run()
>   File "/usr/lib/python3.11/asyncio/events.py", line 80, in _run
>     self._context.run(self._callback, *self._args)
> Traceback (most recent call last):
>   File "/usr/lib/python3.11/asyncio/events.py", line 80, in _run
>     self._context.run(self._callback, *self._args)
>   File 
> "/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_pymodbus/build/test/test_server_asyncio.py",
>  line 155, in handle_task
>     result = result.result()
>              ^^^^^^^^^^^^^^^
>   File 
> "/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_pymodbus/build/pymodbus/server/async_io.py",
>  line 729, in serve_forever
>     self.protocol, self.endpoint = await self.loop.create_datagram_endpoint(
>                                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> TypeError: BaseEventLoop.create_datagram_endpoint() got an unexpected keyword 
> argument 'reuse_address'
> DEBUG    asyncio:base_events.py:676 Close <_UnixSelectorEventLoop 
> running=False closed=False debug=True>
> ---------------------------- Captured log teardown 
> -----------------------------
> DEBUG    asyncio:selector_events.py:54 Using selector: EpollSelector
> _ ERROR at teardown of 
> AsyncioServerTest.test_async_udp_server_serve_forever_twice _
> 
> self = <test.test_server_asyncio.AsyncioServerTest 
> testMethod=test_async_udp_server_serve_forever_twice>
> 
>     async def asyncTearDown(self):
>         """Clean up the test environment"""
>         if self.server is not None:
>             await self.server.server_close()
>             self.server = None
>         if self.task is not None:
>             await asyncio.sleep(0.1)
>             if not self.task.cancelled():
>                 self.task.cancel()
>                 try:
> >                   await self.task
> E                   TypeError: BaseEventLoop.create_datagram_endpoint() got 
> an unexpected keyword argument 'reuse_address'
> 
> test/test_server_asyncio.py:142: TypeError
> ------------------------------ Captured log setup 
> ------------------------------
> DEBUG    asyncio:selector_events.py:54 Using selector: EpollSelector
> ------------------------------ Captured log call 
> -------------------------------
> DEBUG    asyncio:selector_events.py:54 Using selector: EpollSelector
> ERROR    asyncio:base_events.py:1765 Exception in callback 
> AsyncioServerTest.handle_task(<Task finishe.../tasks.py:374>)
> handle: <Handle AsyncioServerTest.handle_task(<Task finishe.../tasks.py:374>) 
> created at /usr/lib/python3.11/asyncio/events.py:80>
> source_traceback: Object created at (most recent call last):
>   File "/usr/lib/python3.11/unittest/case.py", line 623, in run
>     self._callTestMethod(testMethod)
>   File "/usr/lib/python3.11/unittest/async_case.py", line 90, in 
> _callTestMethod
>     if self._callMaybeAsync(method) is not None:
>   File "/usr/lib/python3.11/unittest/async_case.py", line 112, in 
> _callMaybeAsync
>     return self._asyncioRunner.run(
>   File "/usr/lib/python3.11/asyncio/runners.py", line 118, in run
>     return self._loop.run_until_complete(task)
>   File "/usr/lib/python3.11/asyncio/base_events.py", line 640, in 
> run_until_complete
>     self.run_forever()
>   File "/usr/lib/python3.11/asyncio/base_events.py", line 607, in run_forever
>     self._run_once()
>   File "/usr/lib/python3.11/asyncio/base_events.py", line 1911, in _run_once
>     handle._run()
>   File "/usr/lib/python3.11/asyncio/events.py", line 80, in _run
>     self._context.run(self._callback, *self._args)
> Traceback (most recent call last):
>   File "/usr/lib/python3.11/asyncio/events.py", line 80, in _run
>     self._context.run(self._callback, *self._args)
>   File 
> "/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_pymodbus/build/test/test_server_asyncio.py",
>  line 155, in handle_task
>     result = result.result()
>              ^^^^^^^^^^^^^^^
>   File 
> "/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_pymodbus/build/pymodbus/server/async_io.py",
>  line 729, in serve_forever
>     self.protocol, self.endpoint = await self.loop.create_datagram_endpoint(
>                                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> TypeError: BaseEventLoop.create_datagram_endpoint() got an unexpected keyword 
> argument 'reuse_address'
> DEBUG    asyncio:base_events.py:676 Close <_UnixSelectorEventLoop 
> running=False closed=False debug=True>
> ---------------------------- Captured log teardown 
> -----------------------------
> DEBUG    asyncio:selector_events.py:54 Using selector: EpollSelector
> =================================== FAILURES 
> ===================================
> _ test_exp_async_framer[run_async_basic_calls-udp-ModbusSocketFramer-5024-30] 
> __
> 
> fut = <Future cancelled>, timeout = 3
> 
>     async def wait_for(fut, timeout):
>         """Wait for the single Future or coroutine to complete, with timeout.
>     
>         Coroutine will be wrapped in Task.
>     
>         Returns result of the Future or coroutine.  When a timeout occurs,
>         it cancels the task and raises TimeoutError.  To avoid the task
>         cancellation, wrap it in shield().
>     
>         If the wait is cancelled, the task is also cancelled.
>     
>         This function is a coroutine.
>         """
>         loop = events.get_running_loop()
>     
>         if timeout is None:
>             return await fut
>     
>         if timeout <= 0:
>             fut = ensure_future(fut, loop=loop)
>     
>             if fut.done():
>                 return fut.result()
>     
>             await _cancel_and_wait(fut, loop=loop)
>             try:
>                 return fut.result()
>             except exceptions.CancelledError as exc:
>                 raise exceptions.TimeoutError() from exc
>     
>         waiter = loop.create_future()
>         timeout_handle = loop.call_later(timeout, _release_waiter, waiter)
>         cb = functools.partial(_release_waiter, waiter)
>     
>         fut = ensure_future(fut, loop=loop)
>         fut.add_done_callback(cb)
>     
>         try:
>             # wait until the future completes or the timeout
>             try:
>                 await waiter
>             except exceptions.CancelledError:
>                 if fut.done():
>                     return fut.result()
>                 else:
>                     fut.remove_done_callback(cb)
>                     # We must ensure that the task is not running
>                     # after wait_for() returns.
>                     # See https://bugs.python.org/issue32751
>                     await _cancel_and_wait(fut, loop=loop)
>                     raise
>     
>             if fut.done():
>                 return fut.result()
>             else:
>                 fut.remove_done_callback(cb)
>                 # We must ensure that the task is not running
>                 # after wait_for() returns.
>                 # See https://bugs.python.org/issue32751
>                 await _cancel_and_wait(fut, loop=loop)
>                 # In case task cancellation failed with some
>                 # exception, we should re-raise it
>                 # See https://bugs.python.org/issue40607
>                 try:
> >                   return fut.result()
> E                   asyncio.exceptions.CancelledError
> 
> /usr/lib/python3.11/asyncio/tasks.py:490: CancelledError
> 
> The above exception was the direct cause of the following exception:
> 
> test_comm = 'udp'
> test_framer = <class 'pymodbus.framer.socket_framer.ModbusSocketFramer'>
> test_port_offset = 30, test_port = 5024, mock_run_server = None
> test_type = <function run_async_basic_calls at 0x7fa5b2c396c0>
> 
>     @pytest.mark.parametrize("test_port_offset", [30])
>     @pytest.mark.parametrize("test_comm, test_framer, test_port", 
> TEST_COMMS_FRAMER)
>     @pytest.mark.parametrize(
>         "test_type",
>         [
>             None,
>             run_async_basic_calls,
>             run_async_ext_calls,
>         ],
>     )
>     async def test_exp_async_framer(  # pylint: disable=unused-argument
>         test_comm,
>         test_framer,
>         test_port_offset,
>         test_port,
>         mock_run_server,
>         test_type
>     ):
>         """Test client-server async with different framers and calls."""
>         if test_type == run_async_ext_calls and test_framer == 
> ModbusRtuFramer:  # pylint: disable=comparison-with-callable
>             return
>         if test_comm == "serial":
>             return
>     
>         args = Commandline
>         args.framer = test_framer
>         args.comm = test_comm
>         args.port = test_port
>         if isinstance(test_port, int):
>             args.port += test_port_offset
> >       await run_client(test_comm, test_type, args=args)
> 
> test/test_examples.py:152: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> test/test_examples.py:83: in run_client
>     await run_async_client(test_client, modbus_calls=test_type)
> ../../../examples/client_async.py:132: in run_async_client
>     await modbus_calls(client)
> ../../../examples/client_async_basic_calls.py:116: in run_async_basic_calls
>     await _handle_coils(client)
> ../../../examples/client_async_basic_calls.py:21: in _handle_coils
>     rr = await client.read_coils(1, 1, slave=SLAVE)
> pymodbus/client/base.py:292: in execute
>     resp = await asyncio.wait_for(req, timeout=self.params.timeout)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> fut = <Future cancelled>, timeout = 3
> 
>     async def wait_for(fut, timeout):
>         """Wait for the single Future or coroutine to complete, with timeout.
>     
>         Coroutine will be wrapped in Task.
>     
>         Returns result of the Future or coroutine.  When a timeout occurs,
>         it cancels the task and raises TimeoutError.  To avoid the task
>         cancellation, wrap it in shield().
>     
>         If the wait is cancelled, the task is also cancelled.
>     
>         This function is a coroutine.
>         """
>         loop = events.get_running_loop()
>     
>         if timeout is None:
>             return await fut
>     
>         if timeout <= 0:
>             fut = ensure_future(fut, loop=loop)
>     
>             if fut.done():
>                 return fut.result()
>     
>             await _cancel_and_wait(fut, loop=loop)
>             try:
>                 return fut.result()
>             except exceptions.CancelledError as exc:
>                 raise exceptions.TimeoutError() from exc
>     
>         waiter = loop.create_future()
>         timeout_handle = loop.call_later(timeout, _release_waiter, waiter)
>         cb = functools.partial(_release_waiter, waiter)
>     
>         fut = ensure_future(fut, loop=loop)
>         fut.add_done_callback(cb)
>     
>         try:
>             # wait until the future completes or the timeout
>             try:
>                 await waiter
>             except exceptions.CancelledError:
>                 if fut.done():
>                     return fut.result()
>                 else:
>                     fut.remove_done_callback(cb)
>                     # We must ensure that the task is not running
>                     # after wait_for() returns.
>                     # See https://bugs.python.org/issue32751
>                     await _cancel_and_wait(fut, loop=loop)
>                     raise
>     
>             if fut.done():
>                 return fut.result()
>             else:
>                 fut.remove_done_callback(cb)
>                 # We must ensure that the task is not running
>                 # after wait_for() returns.
>                 # See https://bugs.python.org/issue32751
>                 await _cancel_and_wait(fut, loop=loop)
>                 # In case task cancellation failed with some
>                 # exception, we should re-raise it
>                 # See https://bugs.python.org/issue40607
>                 try:
>                     return fut.result()
>                 except exceptions.CancelledError as exc:
> >                   raise exceptions.TimeoutError() from exc
> E                   TimeoutError
> 
> /usr/lib/python3.11/asyncio/tasks.py:492: TimeoutError
> ------------------------------ Captured log setup 
> ------------------------------
> DEBUG    asyncio:selector_events.py:54 Using selector: EpollSelector
> INFO     root:server_async.py:71 ### Create datastore
> INFO     root:server_async.py:150 ### start ASYNC server on port 5054
> ------------------------------ Captured log call 
> -------------------------------
> INFO     root:client_async.py:52 ### Create client object
> INFO     root:client_async.py:128 ### Client starting
> DEBUG    pymodbus.client.udp:udp.py:74 Connecting to 127.0.0.1:5054.
> DEBUG    pymodbus.client.udp:udp.py:107 Connecting.
> DEBUG    pymodbus.client.base:base.py:350 Client connected to modbus server
> INFO     pymodbus.client.udp:udp.py:128 Protocol made connection.
> INFO     pymodbus.client.udp:udp.py:116 Connected to 127.0.0.1:5054.
> INFO     root:client_async_basic_calls.py:20 ### Reading Coil
> DEBUG    pymodbus.client.base:base.py:380 send: 0x0 0x1 0x0 0x0 0x0 0x6 0x1 
> 0x1 0x0 0x1 0x0 0x1
> DEBUG    pymodbus.transaction:transaction.py:516 Adding transaction 1
> ---------------------------- Captured log teardown 
> -----------------------------
> DEBUG    asyncio:selector_events.py:54 Using selector: EpollSelector
> ___ test_exp_async_framer[run_async_basic_calls-udp-ModbusRtuFramer-5025-30] 
> ___
> 
> fut = <Future cancelled>, timeout = 3
> 
>     async def wait_for(fut, timeout):
>         """Wait for the single Future or coroutine to complete, with timeout.
>     
>         Coroutine will be wrapped in Task.
>     
>         Returns result of the Future or coroutine.  When a timeout occurs,
>         it cancels the task and raises TimeoutError.  To avoid the task
>         cancellation, wrap it in shield().
>     
>         If the wait is cancelled, the task is also cancelled.
>     
>         This function is a coroutine.
>         """
>         loop = events.get_running_loop()
>     
>         if timeout is None:
>             return await fut
>     
>         if timeout <= 0:
>             fut = ensure_future(fut, loop=loop)
>     
>             if fut.done():
>                 return fut.result()
>     
>             await _cancel_and_wait(fut, loop=loop)
>             try:
>                 return fut.result()
>             except exceptions.CancelledError as exc:
>                 raise exceptions.TimeoutError() from exc
>     
>         waiter = loop.create_future()
>         timeout_handle = loop.call_later(timeout, _release_waiter, waiter)
>         cb = functools.partial(_release_waiter, waiter)
>     
>         fut = ensure_future(fut, loop=loop)
>         fut.add_done_callback(cb)
>     
>         try:
>             # wait until the future completes or the timeout
>             try:
>                 await waiter
>             except exceptions.CancelledError:
>                 if fut.done():
>                     return fut.result()
>                 else:
>                     fut.remove_done_callback(cb)
>                     # We must ensure that the task is not running
>                     # after wait_for() returns.
>                     # See https://bugs.python.org/issue32751
>                     await _cancel_and_wait(fut, loop=loop)
>                     raise
>     
>             if fut.done():
>                 return fut.result()
>             else:
>                 fut.remove_done_callback(cb)
>                 # We must ensure that the task is not running
>                 # after wait_for() returns.
>                 # See https://bugs.python.org/issue32751
>                 await _cancel_and_wait(fut, loop=loop)
>                 # In case task cancellation failed with some
>                 # exception, we should re-raise it
>                 # See https://bugs.python.org/issue40607
>                 try:
> >                   return fut.result()
> E                   asyncio.exceptions.CancelledError
> 
> /usr/lib/python3.11/asyncio/tasks.py:490: CancelledError
> 
> The above exception was the direct cause of the following exception:
> 
> test_comm = 'udp'
> test_framer = <class 'pymodbus.framer.rtu_framer.ModbusRtuFramer'>
> test_port_offset = 30, test_port = 5025, mock_run_server = None
> test_type = <function run_async_basic_calls at 0x7fa5b2c396c0>
> 
>     @pytest.mark.parametrize("test_port_offset", [30])
>     @pytest.mark.parametrize("test_comm, test_framer, test_port", 
> TEST_COMMS_FRAMER)
>     @pytest.mark.parametrize(
>         "test_type",
>         [
>             None,
>             run_async_basic_calls,
>             run_async_ext_calls,
>         ],
>     )
>     async def test_exp_async_framer(  # pylint: disable=unused-argument
>         test_comm,
>         test_framer,
>         test_port_offset,
>         test_port,
>         mock_run_server,
>         test_type
>     ):
>         """Test client-server async with different framers and calls."""
>         if test_type == run_async_ext_calls and test_framer == 
> ModbusRtuFramer:  # pylint: disable=comparison-with-callable
>             return
>         if test_comm == "serial":
>             return
>     
>         args = Commandline
>         args.framer = test_framer
>         args.comm = test_comm
>         args.port = test_port
>         if isinstance(test_port, int):
>             args.port += test_port_offset
> >       await run_client(test_comm, test_type, args=args)
> 
> test/test_examples.py:152: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> test/test_examples.py:83: in run_client
>     await run_async_client(test_client, modbus_calls=test_type)
> ../../../examples/client_async.py:132: in run_async_client
>     await modbus_calls(client)
> ../../../examples/client_async_basic_calls.py:116: in run_async_basic_calls
>     await _handle_coils(client)
> ../../../examples/client_async_basic_calls.py:21: in _handle_coils
>     rr = await client.read_coils(1, 1, slave=SLAVE)
> pymodbus/client/base.py:292: in execute
>     resp = await asyncio.wait_for(req, timeout=self.params.timeout)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> fut = <Future cancelled>, timeout = 3
> 
>     async def wait_for(fut, timeout):
>         """Wait for the single Future or coroutine to complete, with timeout.
>     
>         Coroutine will be wrapped in Task.
>     
>         Returns result of the Future or coroutine.  When a timeout occurs,
>         it cancels the task and raises TimeoutError.  To avoid the task
>         cancellation, wrap it in shield().
>     
>         If the wait is cancelled, the task is also cancelled.
>     
>         This function is a coroutine.
>         """
>         loop = events.get_running_loop()
>     
>         if timeout is None:
>             return await fut
>     
>         if timeout <= 0:
>             fut = ensure_future(fut, loop=loop)
>     
>             if fut.done():
>                 return fut.result()
>     
>             await _cancel_and_wait(fut, loop=loop)
>             try:
>                 return fut.result()
>             except exceptions.CancelledError as exc:
>                 raise exceptions.TimeoutError() from exc
>     
>         waiter = loop.create_future()
>         timeout_handle = loop.call_later(timeout, _release_waiter, waiter)
>         cb = functools.partial(_release_waiter, waiter)
>     
>         fut = ensure_future(fut, loop=loop)
>         fut.add_done_callback(cb)
>     
>         try:
>             # wait until the future completes or the timeout
>             try:
>                 await waiter
>             except exceptions.CancelledError:
>                 if fut.done():
>                     return fut.result()
>                 else:
>                     fut.remove_done_callback(cb)
>                     # We must ensure that the task is not running
>                     # after wait_for() returns.
>                     # See https://bugs.python.org/issue32751
>                     await _cancel_and_wait(fut, loop=loop)
>                     raise
>     
>             if fut.done():
>                 return fut.result()
>             else:
>                 fut.remove_done_callback(cb)
>                 # We must ensure that the task is not running
>                 # after wait_for() returns.
>                 # See https://bugs.python.org/issue32751
>                 await _cancel_and_wait(fut, loop=loop)
>                 # In case task cancellation failed with some
>                 # exception, we should re-raise it
>                 # See https://bugs.python.org/issue40607
>                 try:
>                     return fut.result()
>                 except exceptions.CancelledError as exc:
> >                   raise exceptions.TimeoutError() from exc
> E                   TimeoutError
> 
> /usr/lib/python3.11/asyncio/tasks.py:492: TimeoutError
> ------------------------------ Captured log setup 
> ------------------------------
> DEBUG    asyncio:selector_events.py:54 Using selector: EpollSelector
> INFO     root:server_async.py:71 ### Create datastore
> INFO     root:server_async.py:150 ### start ASYNC server on port 5055
> ------------------------------ Captured log call 
> -------------------------------
> INFO     root:client_async.py:52 ### Create client object
> INFO     root:client_async.py:128 ### Client starting
> DEBUG    pymodbus.client.udp:udp.py:74 Connecting to 127.0.0.1:5055.
> DEBUG    pymodbus.client.udp:udp.py:107 Connecting.
> DEBUG    pymodbus.client.base:base.py:350 Client connected to modbus server
> INFO     pymodbus.client.udp:udp.py:128 Protocol made connection.
> INFO     pymodbus.client.udp:udp.py:116 Connected to 127.0.0.1:5055.
> INFO     root:client_async_basic_calls.py:20 ### Reading Coil
> DEBUG    pymodbus.client.base:base.py:380 send: 0x1 0x1 0x0 0x1 0x0 0x1 0xac 
> 0xa
> DEBUG    pymodbus.transaction:transaction.py:516 Adding transaction 1
> ---------------------------- Captured log teardown 
> -----------------------------
> DEBUG    asyncio:selector_events.py:54 Using selector: EpollSelector
> __ test_exp_async_framer[run_async_ext_calls-udp-ModbusSocketFramer-5024-30] 
> ___
> 
> fut = <Future cancelled>, timeout = 3
> 
>     async def wait_for(fut, timeout):
>         """Wait for the single Future or coroutine to complete, with timeout.
>     
>         Coroutine will be wrapped in Task.
>     
>         Returns result of the Future or coroutine.  When a timeout occurs,
>         it cancels the task and raises TimeoutError.  To avoid the task
>         cancellation, wrap it in shield().
>     
>         If the wait is cancelled, the task is also cancelled.
>     
>         This function is a coroutine.
>         """
>         loop = events.get_running_loop()
>     
>         if timeout is None:
>             return await fut
>     
>         if timeout <= 0:
>             fut = ensure_future(fut, loop=loop)
>     
>             if fut.done():
>                 return fut.result()
>     
>             await _cancel_and_wait(fut, loop=loop)
>             try:
>                 return fut.result()
>             except exceptions.CancelledError as exc:
>                 raise exceptions.TimeoutError() from exc
>     
>         waiter = loop.create_future()
>         timeout_handle = loop.call_later(timeout, _release_waiter, waiter)
>         cb = functools.partial(_release_waiter, waiter)
>     
>         fut = ensure_future(fut, loop=loop)
>         fut.add_done_callback(cb)
>     
>         try:
>             # wait until the future completes or the timeout
>             try:
>                 await waiter
>             except exceptions.CancelledError:
>                 if fut.done():
>                     return fut.result()
>                 else:
>                     fut.remove_done_callback(cb)
>                     # We must ensure that the task is not running
>                     # after wait_for() returns.
>                     # See https://bugs.python.org/issue32751
>                     await _cancel_and_wait(fut, loop=loop)
>                     raise
>     
>             if fut.done():
>                 return fut.result()
>             else:
>                 fut.remove_done_callback(cb)
>                 # We must ensure that the task is not running
>                 # after wait_for() returns.
>                 # See https://bugs.python.org/issue32751
>                 await _cancel_and_wait(fut, loop=loop)
>                 # In case task cancellation failed with some
>                 # exception, we should re-raise it
>                 # See https://bugs.python.org/issue40607
>                 try:
> >                   return fut.result()
> E                   asyncio.exceptions.CancelledError
> 
> /usr/lib/python3.11/asyncio/tasks.py:490: CancelledError
> 
> The above exception was the direct cause of the following exception:
> 
> test_comm = 'udp'
> test_framer = <class 'pymodbus.framer.socket_framer.ModbusSocketFramer'>
> test_port_offset = 30, test_port = 5024, mock_run_server = None
> test_type = <function run_async_ext_calls at 0x7fa5b2c39940>
> 
>     @pytest.mark.parametrize("test_port_offset", [30])
>     @pytest.mark.parametrize("test_comm, test_framer, test_port", 
> TEST_COMMS_FRAMER)
>     @pytest.mark.parametrize(
>         "test_type",
>         [
>             None,
>             run_async_basic_calls,
>             run_async_ext_calls,
>         ],
>     )
>     async def test_exp_async_framer(  # pylint: disable=unused-argument
>         test_comm,
>         test_framer,
>         test_port_offset,
>         test_port,
>         mock_run_server,
>         test_type
>     ):
>         """Test client-server async with different framers and calls."""
>         if test_type == run_async_ext_calls and test_framer == 
> ModbusRtuFramer:  # pylint: disable=comparison-with-callable
>             return
>         if test_comm == "serial":
>             return
>     
>         args = Commandline
>         args.framer = test_framer
>         args.comm = test_comm
>         args.port = test_port
>         if isinstance(test_port, int):
>             args.port += test_port_offset
> >       await run_client(test_comm, test_type, args=args)
> 
> test/test_examples.py:152: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> test/test_examples.py:83: in run_client
>     await run_async_client(test_client, modbus_calls=test_type)
> ../../../examples/client_async.py:132: in run_async_client
>     await modbus_calls(client)
> ../../../examples/client_async_extended_calls.py:166: in run_async_ext_calls
>     await _execute_information_requests(client)
> ../../../examples/client_async_extended_calls.py:63: in 
> _execute_information_requests
>     rr = await client.execute(ReadDeviceInformationRequest(unit=UNIT))
> pymodbus/client/base.py:292: in execute
>     resp = await asyncio.wait_for(req, timeout=self.params.timeout)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> fut = <Future cancelled>, timeout = 3
> 
>     async def wait_for(fut, timeout):
>         """Wait for the single Future or coroutine to complete, with timeout.
>     
>         Coroutine will be wrapped in Task.
>     
>         Returns result of the Future or coroutine.  When a timeout occurs,
>         it cancels the task and raises TimeoutError.  To avoid the task
>         cancellation, wrap it in shield().
>     
>         If the wait is cancelled, the task is also cancelled.
>     
>         This function is a coroutine.
>         """
>         loop = events.get_running_loop()
>     
>         if timeout is None:
>             return await fut
>     
>         if timeout <= 0:
>             fut = ensure_future(fut, loop=loop)
>     
>             if fut.done():
>                 return fut.result()
>     
>             await _cancel_and_wait(fut, loop=loop)
>             try:
>                 return fut.result()
>             except exceptions.CancelledError as exc:
>                 raise exceptions.TimeoutError() from exc
>     
>         waiter = loop.create_future()
>         timeout_handle = loop.call_later(timeout, _release_waiter, waiter)
>         cb = functools.partial(_release_waiter, waiter)
>     
>         fut = ensure_future(fut, loop=loop)
>         fut.add_done_callback(cb)
>     
>         try:
>             # wait until the future completes or the timeout
>             try:
>                 await waiter
>             except exceptions.CancelledError:
>                 if fut.done():
>                     return fut.result()
>                 else:
>                     fut.remove_done_callback(cb)
>                     # We must ensure that the task is not running
>                     # after wait_for() returns.
>                     # See https://bugs.python.org/issue32751
>                     await _cancel_and_wait(fut, loop=loop)
>                     raise
>     
>             if fut.done():
>                 return fut.result()
>             else:
>                 fut.remove_done_callback(cb)
>                 # We must ensure that the task is not running
>                 # after wait_for() returns.
>                 # See https://bugs.python.org/issue32751
>                 await _cancel_and_wait(fut, loop=loop)
>                 # In case task cancellation failed with some
>                 # exception, we should re-raise it
>                 # See https://bugs.python.org/issue40607
>                 try:
>                     return fut.result()
>                 except exceptions.CancelledError as exc:
> >                   raise exceptions.TimeoutError() from exc
> E                   TimeoutError
> 
> /usr/lib/python3.11/asyncio/tasks.py:492: TimeoutError
> ------------------------------ Captured log setup 
> ------------------------------
> DEBUG    asyncio:selector_events.py:54 Using selector: EpollSelector
> INFO     root:server_async.py:71 ### Create datastore
> INFO     root:server_async.py:150 ### start ASYNC server on port 5054
> ------------------------------ Captured log call 
> -------------------------------
> INFO     root:client_async.py:52 ### Create client object
> INFO     root:client_async.py:128 ### Client starting
> DEBUG    pymodbus.client.udp:udp.py:74 Connecting to 127.0.0.1:5054.
> DEBUG    pymodbus.client.udp:udp.py:107 Connecting.
> DEBUG    pymodbus.client.base:base.py:350 Client connected to modbus server
> INFO     pymodbus.client.udp:udp.py:128 Protocol made connection.
> INFO     pymodbus.client.udp:udp.py:116 Connected to 127.0.0.1:5054.
> INFO     root:client_async_extended_calls.py:62 ### Running 
> ReadDeviceInformationRequest
> DEBUG    pymodbus.client.base:base.py:380 send: 0x0 0x1 0x0 0x0 0x0 0x5 0x1 
> 0x2b 0xe 0x1 0x0
> DEBUG    pymodbus.transaction:transaction.py:516 Adding transaction 1
> ---------------------------- Captured log teardown 
> -----------------------------
> DEBUG    asyncio:selector_events.py:54 Using selector: EpollSelector
> ________________ AsyncioServerTest.test_async_start_udp_server 
> _________________
> 
> fut = <Future cancelled created at 
> /usr/lib/python3.11/asyncio/base_events.py:427>
> timeout = 0.1
> 
>     async def wait_for(fut, timeout):
>         """Wait for the single Future or coroutine to complete, with timeout.
>     
>         Coroutine will be wrapped in Task.
>     
>         Returns result of the Future or coroutine.  When a timeout occurs,
>         it cancels the task and raises TimeoutError.  To avoid the task
>         cancellation, wrap it in shield().
>     
>         If the wait is cancelled, the task is also cancelled.
>     
>         This function is a coroutine.
>         """
>         loop = events.get_running_loop()
>     
>         if timeout is None:
>             return await fut
>     
>         if timeout <= 0:
>             fut = ensure_future(fut, loop=loop)
>     
>             if fut.done():
>                 return fut.result()
>     
>             await _cancel_and_wait(fut, loop=loop)
>             try:
>                 return fut.result()
>             except exceptions.CancelledError as exc:
>                 raise exceptions.TimeoutError() from exc
>     
>         waiter = loop.create_future()
>         timeout_handle = loop.call_later(timeout, _release_waiter, waiter)
>         cb = functools.partial(_release_waiter, waiter)
>     
>         fut = ensure_future(fut, loop=loop)
>         fut.add_done_callback(cb)
>     
>         try:
>             # wait until the future completes or the timeout
>             try:
>                 await waiter
>             except exceptions.CancelledError:
>                 if fut.done():
>                     return fut.result()
>                 else:
>                     fut.remove_done_callback(cb)
>                     # We must ensure that the task is not running
>                     # after wait_for() returns.
>                     # See https://bugs.python.org/issue32751
>                     await _cancel_and_wait(fut, loop=loop)
>                     raise
>     
>             if fut.done():
>                 return fut.result()
>             else:
>                 fut.remove_done_callback(cb)
>                 # We must ensure that the task is not running
>                 # after wait_for() returns.
>                 # See https://bugs.python.org/issue32751
>                 await _cancel_and_wait(fut, loop=loop)
>                 # In case task cancellation failed with some
>                 # exception, we should re-raise it
>                 # See https://bugs.python.org/issue40607
>                 try:
> >                   return fut.result()
> E                   asyncio.exceptions.CancelledError
> 
> /usr/lib/python3.11/asyncio/tasks.py:490: CancelledError
> 
> The above exception was the direct cause of the following exception:
> 
> self = <test.test_server_asyncio.AsyncioServerTest 
> testMethod=test_async_start_udp_server>
> 
>     async def test_async_start_udp_server(self):
>         """Test that the modbus udp asyncio server starts correctly"""
> >       await self.start_server(do_udp=True, do_ident=True)
> 
> test/test_server_asyncio.py:331: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> test/test_server_asyncio.py:181: in start_server
>     await asyncio.wait_for(self.server.serving, timeout=0.1)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> fut = <Future cancelled created at 
> /usr/lib/python3.11/asyncio/base_events.py:427>
> timeout = 0.1
> 
>     async def wait_for(fut, timeout):
>         """Wait for the single Future or coroutine to complete, with timeout.
>     
>         Coroutine will be wrapped in Task.
>     
>         Returns result of the Future or coroutine.  When a timeout occurs,
>         it cancels the task and raises TimeoutError.  To avoid the task
>         cancellation, wrap it in shield().
>     
>         If the wait is cancelled, the task is also cancelled.
>     
>         This function is a coroutine.
>         """
>         loop = events.get_running_loop()
>     
>         if timeout is None:
>             return await fut
>     
>         if timeout <= 0:
>             fut = ensure_future(fut, loop=loop)
>     
>             if fut.done():
>                 return fut.result()
>     
>             await _cancel_and_wait(fut, loop=loop)
>             try:
>                 return fut.result()
>             except exceptions.CancelledError as exc:
>                 raise exceptions.TimeoutError() from exc
>     
>         waiter = loop.create_future()
>         timeout_handle = loop.call_later(timeout, _release_waiter, waiter)
>         cb = functools.partial(_release_waiter, waiter)
>     
>         fut = ensure_future(fut, loop=loop)
>         fut.add_done_callback(cb)
>     
>         try:
>             # wait until the future completes or the timeout
>             try:
>                 await waiter
>             except exceptions.CancelledError:
>                 if fut.done():
>                     return fut.result()
>                 else:
>                     fut.remove_done_callback(cb)
>                     # We must ensure that the task is not running
>                     # after wait_for() returns.
>                     # See https://bugs.python.org/issue32751
>                     await _cancel_and_wait(fut, loop=loop)
>                     raise
>     
>             if fut.done():
>                 return fut.result()
>             else:
>                 fut.remove_done_callback(cb)
>                 # We must ensure that the task is not running
>                 # after wait_for() returns.
>                 # See https://bugs.python.org/issue32751
>                 await _cancel_and_wait(fut, loop=loop)
>                 # In case task cancellation failed with some
>                 # exception, we should re-raise it
>                 # See https://bugs.python.org/issue40607
>                 try:
>                     return fut.result()
>                 except exceptions.CancelledError as exc:
> >                   raise exceptions.TimeoutError() from exc
> E                   TimeoutError
> 
> /usr/lib/python3.11/asyncio/tasks.py:492: TimeoutError
> ------------------------------ Captured log setup 
> ------------------------------
> DEBUG    asyncio:selector_events.py:54 Using selector: EpollSelector
> ------------------------------ Captured log call 
> -------------------------------
> DEBUG    asyncio:selector_events.py:54 Using selector: EpollSelector
> ERROR    asyncio:base_events.py:1765 Exception in callback 
> AsyncioServerTest.handle_task(<Task finishe.../tasks.py:374>)
> handle: <Handle AsyncioServerTest.handle_task(<Task finishe.../tasks.py:374>) 
> created at /usr/lib/python3.11/asyncio/events.py:80>
> source_traceback: Object created at (most recent call last):
>   File "/usr/lib/python3.11/unittest/case.py", line 623, in run
>     self._callTestMethod(testMethod)
>   File "/usr/lib/python3.11/unittest/async_case.py", line 90, in 
> _callTestMethod
>     if self._callMaybeAsync(method) is not None:
>   File "/usr/lib/python3.11/unittest/async_case.py", line 112, in 
> _callMaybeAsync
>     return self._asyncioRunner.run(
>   File "/usr/lib/python3.11/asyncio/runners.py", line 118, in run
>     return self._loop.run_until_complete(task)
>   File "/usr/lib/python3.11/asyncio/base_events.py", line 640, in 
> run_until_complete
>     self.run_forever()
>   File "/usr/lib/python3.11/asyncio/base_events.py", line 607, in run_forever
>     self._run_once()
>   File "/usr/lib/python3.11/asyncio/base_events.py", line 1911, in _run_once
>     handle._run()
>   File "/usr/lib/python3.11/asyncio/events.py", line 80, in _run
>     self._context.run(self._callback, *self._args)
> Traceback (most recent call last):
>   File "/usr/lib/python3.11/asyncio/events.py", line 80, in _run
>     self._context.run(self._callback, *self._args)
>   File 
> "/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_pymodbus/build/test/test_server_asyncio.py",
>  line 155, in handle_task
>     result = result.result()
>              ^^^^^^^^^^^^^^^
>   File 
> "/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_pymodbus/build/pymodbus/server/async_io.py",
>  line 729, in serve_forever
>     self.protocol, self.endpoint = await self.loop.create_datagram_endpoint(
>                                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> TypeError: BaseEventLoop.create_datagram_endpoint() got an unexpected keyword 
> argument 'reuse_address'
> DEBUG    asyncio:base_events.py:676 Close <_UnixSelectorEventLoop 
> running=False closed=False debug=True>
> ______________ AsyncioServerTest.test_async_udp_server_exception 
> _______________
> 
> fut = <Future cancelled created at 
> /usr/lib/python3.11/asyncio/base_events.py:427>
> timeout = 0.1
> 
>     async def wait_for(fut, timeout):
>         """Wait for the single Future or coroutine to complete, with timeout.
>     
>         Coroutine will be wrapped in Task.
>     
>         Returns result of the Future or coroutine.  When a timeout occurs,
>         it cancels the task and raises TimeoutError.  To avoid the task
>         cancellation, wrap it in shield().
>     
>         If the wait is cancelled, the task is also cancelled.
>     
>         This function is a coroutine.
>         """
>         loop = events.get_running_loop()
>     
>         if timeout is None:
>             return await fut
>     
>         if timeout <= 0:
>             fut = ensure_future(fut, loop=loop)
>     
>             if fut.done():
>                 return fut.result()
>     
>             await _cancel_and_wait(fut, loop=loop)
>             try:
>                 return fut.result()
>             except exceptions.CancelledError as exc:
>                 raise exceptions.TimeoutError() from exc
>     
>         waiter = loop.create_future()
>         timeout_handle = loop.call_later(timeout, _release_waiter, waiter)
>         cb = functools.partial(_release_waiter, waiter)
>     
>         fut = ensure_future(fut, loop=loop)
>         fut.add_done_callback(cb)
>     
>         try:
>             # wait until the future completes or the timeout
>             try:
>                 await waiter
>             except exceptions.CancelledError:
>                 if fut.done():
>                     return fut.result()
>                 else:
>                     fut.remove_done_callback(cb)
>                     # We must ensure that the task is not running
>                     # after wait_for() returns.
>                     # See https://bugs.python.org/issue32751
>                     await _cancel_and_wait(fut, loop=loop)
>                     raise
>     
>             if fut.done():
>                 return fut.result()
>             else:
>                 fut.remove_done_callback(cb)
>                 # We must ensure that the task is not running
>                 # after wait_for() returns.
>                 # See https://bugs.python.org/issue32751
>                 await _cancel_and_wait(fut, loop=loop)
>                 # In case task cancellation failed with some
>                 # exception, we should re-raise it
>                 # See https://bugs.python.org/issue40607
>                 try:
> >                   return fut.result()
> E                   asyncio.exceptions.CancelledError
> 
> /usr/lib/python3.11/asyncio/tasks.py:490: CancelledError
> 
> The above exception was the direct cause of the following exception:
> 
> self = <test.test_server_asyncio.AsyncioServerTest 
> testMethod=test_async_udp_server_exception>
> 
>     async def test_async_udp_server_exception(self):
>         """Test sending garbage data on a TCP socket should drop the 
> connection"""
>         BasicClient.dataTo = b"\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
>         BasicClient.connected = self.loop.create_future()
>         BasicClient.done = self.loop.create_future()
> >       await self.start_server(do_udp=True)
> 
> test/test_server_asyncio.py:414: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> test/test_server_asyncio.py:181: in start_server
>     await asyncio.wait_for(self.server.serving, timeout=0.1)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> fut = <Future cancelled created at 
> /usr/lib/python3.11/asyncio/base_events.py:427>
> timeout = 0.1
> 
>     async def wait_for(fut, timeout):
>         """Wait for the single Future or coroutine to complete, with timeout.
>     
>         Coroutine will be wrapped in Task.
>     
>         Returns result of the Future or coroutine.  When a timeout occurs,
>         it cancels the task and raises TimeoutError.  To avoid the task
>         cancellation, wrap it in shield().
>     
>         If the wait is cancelled, the task is also cancelled.
>     
>         This function is a coroutine.
>         """
>         loop = events.get_running_loop()
>     
>         if timeout is None:
>             return await fut
>     
>         if timeout <= 0:
>             fut = ensure_future(fut, loop=loop)
>     
>             if fut.done():
>                 return fut.result()
>     
>             await _cancel_and_wait(fut, loop=loop)
>             try:
>                 return fut.result()
>             except exceptions.CancelledError as exc:
>                 raise exceptions.TimeoutError() from exc
>     
>         waiter = loop.create_future()
>         timeout_handle = loop.call_later(timeout, _release_waiter, waiter)
>         cb = functools.partial(_release_waiter, waiter)
>     
>         fut = ensure_future(fut, loop=loop)
>         fut.add_done_callback(cb)
>     
>         try:
>             # wait until the future completes or the timeout
>             try:
>                 await waiter
>             except exceptions.CancelledError:
>                 if fut.done():
>                     return fut.result()
>                 else:
>                     fut.remove_done_callback(cb)
>                     # We must ensure that the task is not running
>                     # after wait_for() returns.
>                     # See https://bugs.python.org/issue32751
>                     await _cancel_and_wait(fut, loop=loop)
>                     raise
>     
>             if fut.done():
>                 return fut.result()
>             else:
>                 fut.remove_done_callback(cb)
>                 # We must ensure that the task is not running
>                 # after wait_for() returns.
>                 # See https://bugs.python.org/issue32751
>                 await _cancel_and_wait(fut, loop=loop)
>                 # In case task cancellation failed with some
>                 # exception, we should re-raise it
>                 # See https://bugs.python.org/issue40607
>                 try:
>                     return fut.result()
>                 except exceptions.CancelledError as exc:
> >                   raise exceptions.TimeoutError() from exc
> E                   TimeoutError
> 
> /usr/lib/python3.11/asyncio/tasks.py:492: TimeoutError
> ------------------------------ Captured log setup 
> ------------------------------
> DEBUG    asyncio:selector_events.py:54 Using selector: EpollSelector
> ------------------------------ Captured log call 
> -------------------------------
> DEBUG    asyncio:selector_events.py:54 Using selector: EpollSelector
> ERROR    asyncio:base_events.py:1765 Exception in callback 
> AsyncioServerTest.handle_task(<Task finishe.../tasks.py:374>)
> handle: <Handle AsyncioServerTest.handle_task(<Task finishe.../tasks.py:374>) 
> created at /usr/lib/python3.11/asyncio/events.py:80>
> source_traceback: Object created at (most recent call last):
>   File "/usr/lib/python3.11/unittest/case.py", line 623, in run
>     self._callTestMethod(testMethod)
>   File "/usr/lib/python3.11/unittest/async_case.py", line 90, in 
> _callTestMethod
>     if self._callMaybeAsync(method) is not None:
>   File "/usr/lib/python3.11/unittest/async_case.py", line 112, in 
> _callMaybeAsync
>     return self._asyncioRunner.run(
>   File "/usr/lib/python3.11/asyncio/runners.py", line 118, in run
>     return self._loop.run_until_complete(task)
>   File "/usr/lib/python3.11/asyncio/base_events.py", line 640, in 
> run_until_complete
>     self.run_forever()
>   File "/usr/lib/python3.11/asyncio/base_events.py", line 607, in run_forever
>     self._run_once()
>   File "/usr/lib/python3.11/asyncio/base_events.py", line 1911, in _run_once
>     handle._run()
>   File "/usr/lib/python3.11/asyncio/events.py", line 80, in _run
>     self._context.run(self._callback, *self._args)
> Traceback (most recent call last):
>   File "/usr/lib/python3.11/asyncio/events.py", line 80, in _run
>     self._context.run(self._callback, *self._args)
>   File 
> "/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_pymodbus/build/test/test_server_asyncio.py",
>  line 155, in handle_task
>     result = result.result()
>              ^^^^^^^^^^^^^^^
>   File 
> "/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_pymodbus/build/pymodbus/server/async_io.py",
>  line 729, in serve_forever
>     self.protocol, self.endpoint = await self.loop.create_datagram_endpoint(
>                                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> TypeError: BaseEventLoop.create_datagram_endpoint() got an unexpected keyword 
> argument 'reuse_address'
> DEBUG    asyncio:base_events.py:676 Close <_UnixSelectorEventLoop 
> running=False closed=False debug=True>
> _____________ AsyncioServerTest.test_async_udp_server_receive_data 
> _____________
> 
> fut = <Future cancelled created at 
> /usr/lib/python3.11/asyncio/base_events.py:427>
> timeout = 0.1
> 
>     async def wait_for(fut, timeout):
>         """Wait for the single Future or coroutine to complete, with timeout.
>     
>         Coroutine will be wrapped in Task.
>     
>         Returns result of the Future or coroutine.  When a timeout occurs,
>         it cancels the task and raises TimeoutError.  To avoid the task
>         cancellation, wrap it in shield().
>     
>         If the wait is cancelled, the task is also cancelled.
>     
>         This function is a coroutine.
>         """
>         loop = events.get_running_loop()
>     
>         if timeout is None:
>             return await fut
>     
>         if timeout <= 0:
>             fut = ensure_future(fut, loop=loop)
>     
>             if fut.done():
>                 return fut.result()
>     
>             await _cancel_and_wait(fut, loop=loop)
>             try:
>                 return fut.result()
>             except exceptions.CancelledError as exc:
>                 raise exceptions.TimeoutError() from exc
>     
>         waiter = loop.create_future()
>         timeout_handle = loop.call_later(timeout, _release_waiter, waiter)
>         cb = functools.partial(_release_waiter, waiter)
>     
>         fut = ensure_future(fut, loop=loop)
>         fut.add_done_callback(cb)
>     
>         try:
>             # wait until the future completes or the timeout
>             try:
>                 await waiter
>             except exceptions.CancelledError:
>                 if fut.done():
>                     return fut.result()
>                 else:
>                     fut.remove_done_callback(cb)
>                     # We must ensure that the task is not running
>                     # after wait_for() returns.
>                     # See https://bugs.python.org/issue32751
>                     await _cancel_and_wait(fut, loop=loop)
>                     raise
>     
>             if fut.done():
>                 return fut.result()
>             else:
>                 fut.remove_done_callback(cb)
>                 # We must ensure that the task is not running
>                 # after wait_for() returns.
>                 # See https://bugs.python.org/issue32751
>                 await _cancel_and_wait(fut, loop=loop)
>                 # In case task cancellation failed with some
>                 # exception, we should re-raise it
>                 # See https://bugs.python.org/issue40607
>                 try:
> >                   return fut.result()
> E                   asyncio.exceptions.CancelledError
> 
> /usr/lib/python3.11/asyncio/tasks.py:490: CancelledError
> 
> The above exception was the direct cause of the following exception:
> 
> self = <test.test_server_asyncio.AsyncioServerTest 
> testMethod=test_async_udp_server_receive_data>
> 
>     @pytest.mark.skifif(pytest.IS_WINDOWS, reason="Windows have a timeout 
> problem.")
>     async def test_async_udp_server_receive_data(self):
>         """Test that the sending data on datagram socket gets data pushed to 
> framer"""
> >       await self.start_server(do_udp=True)
> 
> test/test_server_asyncio.py:363: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> test/test_server_asyncio.py:181: in start_server
>     await asyncio.wait_for(self.server.serving, timeout=0.1)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> fut = <Future cancelled created at 
> /usr/lib/python3.11/asyncio/base_events.py:427>
> timeout = 0.1
> 
>     async def wait_for(fut, timeout):
>         """Wait for the single Future or coroutine to complete, with timeout.
>     
>         Coroutine will be wrapped in Task.
>     
>         Returns result of the Future or coroutine.  When a timeout occurs,
>         it cancels the task and raises TimeoutError.  To avoid the task
>         cancellation, wrap it in shield().
>     
>         If the wait is cancelled, the task is also cancelled.
>     
>         This function is a coroutine.
>         """
>         loop = events.get_running_loop()
>     
>         if timeout is None:
>             return await fut
>     
>         if timeout <= 0:
>             fut = ensure_future(fut, loop=loop)
>     
>             if fut.done():
>                 return fut.result()
>     
>             await _cancel_and_wait(fut, loop=loop)
>             try:
>                 return fut.result()
>             except exceptions.CancelledError as exc:
>                 raise exceptions.TimeoutError() from exc
>     
>         waiter = loop.create_future()
>         timeout_handle = loop.call_later(timeout, _release_waiter, waiter)
>         cb = functools.partial(_release_waiter, waiter)
>     
>         fut = ensure_future(fut, loop=loop)
>         fut.add_done_callback(cb)
>     
>         try:
>             # wait until the future completes or the timeout
>             try:
>                 await waiter
>             except exceptions.CancelledError:
>                 if fut.done():
>                     return fut.result()
>                 else:
>                     fut.remove_done_callback(cb)
>                     # We must ensure that the task is not running
>                     # after wait_for() returns.
>                     # See https://bugs.python.org/issue32751
>                     await _cancel_and_wait(fut, loop=loop)
>                     raise
>     
>             if fut.done():
>                 return fut.result()
>             else:
>                 fut.remove_done_callback(cb)
>                 # We must ensure that the task is not running
>                 # after wait_for() returns.
>                 # See https://bugs.python.org/issue32751
>                 await _cancel_and_wait(fut, loop=loop)
>                 # In case task cancellation failed with some
>                 # exception, we should re-raise it
>                 # See https://bugs.python.org/issue40607
>                 try:
>                     return fut.result()
>                 except exceptions.CancelledError as exc:
> >                   raise exceptions.TimeoutError() from exc
> E                   TimeoutError
> 
> /usr/lib/python3.11/asyncio/tasks.py:492: TimeoutError
> ------------------------------ Captured log setup 
> ------------------------------
> DEBUG    asyncio:selector_events.py:54 Using selector: EpollSelector
> ------------------------------ Captured log call 
> -------------------------------
> DEBUG    asyncio:selector_events.py:54 Using selector: EpollSelector
> ERROR    asyncio:base_events.py:1765 Exception in callback 
> AsyncioServerTest.handle_task(<Task finishe.../tasks.py:374>)
> handle: <Handle AsyncioServerTest.handle_task(<Task finishe.../tasks.py:374>) 
> created at /usr/lib/python3.11/asyncio/events.py:80>
> source_traceback: Object created at (most recent call last):
>   File "/usr/lib/python3.11/unittest/case.py", line 623, in run
>     self._callTestMethod(testMethod)
>   File "/usr/lib/python3.11/unittest/async_case.py", line 90, in 
> _callTestMethod
>     if self._callMaybeAsync(method) is not None:
>   File "/usr/lib/python3.11/unittest/async_case.py", line 112, in 
> _callMaybeAsync
>     return self._asyncioRunner.run(
>   File "/usr/lib/python3.11/asyncio/runners.py", line 118, in run
>     return self._loop.run_until_complete(task)
>   File "/usr/lib/python3.11/asyncio/base_events.py", line 640, in 
> run_until_complete
>     self.run_forever()
>   File "/usr/lib/python3.11/asyncio/base_events.py", line 607, in run_forever
>     self._run_once()
>   File "/usr/lib/python3.11/asyncio/base_events.py", line 1911, in _run_once
>     handle._run()
>   File "/usr/lib/python3.11/asyncio/events.py", line 80, in _run
>     self._context.run(self._callback, *self._args)
> Traceback (most recent call last):
>   File "/usr/lib/python3.11/asyncio/events.py", line 80, in _run
>     self._context.run(self._callback, *self._args)
>   File 
> "/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_pymodbus/build/test/test_server_asyncio.py",
>  line 155, in handle_task
>     result = result.result()
>              ^^^^^^^^^^^^^^^
>   File 
> "/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_pymodbus/build/pymodbus/server/async_io.py",
>  line 729, in serve_forever
>     self.protocol, self.endpoint = await self.loop.create_datagram_endpoint(
>                                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> TypeError: BaseEventLoop.create_datagram_endpoint() got an unexpected keyword 
> argument 'reuse_address'
> DEBUG    asyncio:base_events.py:676 Close <_UnixSelectorEventLoop 
> running=False closed=False debug=True>
> ______________ AsyncioServerTest.test_async_udp_server_roundtrip 
> _______________
> 
> fut = <Future cancelled created at 
> /usr/lib/python3.11/asyncio/base_events.py:427>
> timeout = 0.1
> 
>     async def wait_for(fut, timeout):
>         """Wait for the single Future or coroutine to complete, with timeout.
>     
>         Coroutine will be wrapped in Task.
>     
>         Returns result of the Future or coroutine.  When a timeout occurs,
>         it cancels the task and raises TimeoutError.  To avoid the task
>         cancellation, wrap it in shield().
>     
>         If the wait is cancelled, the task is also cancelled.
>     
>         This function is a coroutine.
>         """
>         loop = events.get_running_loop()
>     
>         if timeout is None:
>             return await fut
>     
>         if timeout <= 0:
>             fut = ensure_future(fut, loop=loop)
>     
>             if fut.done():
>                 return fut.result()
>     
>             await _cancel_and_wait(fut, loop=loop)
>             try:
>                 return fut.result()
>             except exceptions.CancelledError as exc:
>                 raise exceptions.TimeoutError() from exc
>     
>         waiter = loop.create_future()
>         timeout_handle = loop.call_later(timeout, _release_waiter, waiter)
>         cb = functools.partial(_release_waiter, waiter)
>     
>         fut = ensure_future(fut, loop=loop)
>         fut.add_done_callback(cb)
>     
>         try:
>             # wait until the future completes or the timeout
>             try:
>                 await waiter
>             except exceptions.CancelledError:
>                 if fut.done():
>                     return fut.result()
>                 else:
>                     fut.remove_done_callback(cb)
>                     # We must ensure that the task is not running
>                     # after wait_for() returns.
>                     # See https://bugs.python.org/issue32751
>                     await _cancel_and_wait(fut, loop=loop)
>                     raise
>     
>             if fut.done():
>                 return fut.result()
>             else:
>                 fut.remove_done_callback(cb)
>                 # We must ensure that the task is not running
>                 # after wait_for() returns.
>                 # See https://bugs.python.org/issue32751
>                 await _cancel_and_wait(fut, loop=loop)
>                 # In case task cancellation failed with some
>                 # exception, we should re-raise it
>                 # See https://bugs.python.org/issue40607
>                 try:
> >                   return fut.result()
> E                   asyncio.exceptions.CancelledError
> 
> /usr/lib/python3.11/asyncio/tasks.py:490: CancelledError
> 
> The above exception was the direct cause of the following exception:
> 
> self = <test.test_server_asyncio.AsyncioServerTest 
> testMethod=test_async_udp_server_roundtrip>
> 
>     async def test_async_udp_server_roundtrip(self):
>         """Test sending and receiving data on udp socket"""
>         expected_response = b"\x01\x00\x00\x00\x00\x05\x01\x03\x02\x00\x11"  
> # value of 17 as per context
>         BasicClient.dataTo = TEST_DATA  # unit 1, read register
>         BasicClient.done = self.loop.create_future()
> >       await self.start_server(do_udp=True)
> 
> test/test_server_asyncio.py:398: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> test/test_server_asyncio.py:181: in start_server
>     await asyncio.wait_for(self.server.serving, timeout=0.1)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> fut = <Future cancelled created at 
> /usr/lib/python3.11/asyncio/base_events.py:427>
> timeout = 0.1
> 
>     async def wait_for(fut, timeout):
>         """Wait for the single Future or coroutine to complete, with timeout.
>     
>         Coroutine will be wrapped in Task.
>     
>         Returns result of the Future or coroutine.  When a timeout occurs,
>         it cancels the task and raises TimeoutError.  To avoid the task
>         cancellation, wrap it in shield().
>     
>         If the wait is cancelled, the task is also cancelled.
>     
>         This function is a coroutine.
>         """
>         loop = events.get_running_loop()
>     
>         if timeout is None:
>             return await fut
>     
>         if timeout <= 0:
>             fut = ensure_future(fut, loop=loop)
>     
>             if fut.done():
>                 return fut.result()
>     
>             await _cancel_and_wait(fut, loop=loop)
>             try:
>                 return fut.result()
>             except exceptions.CancelledError as exc:
>                 raise exceptions.TimeoutError() from exc
>     
>         waiter = loop.create_future()
>         timeout_handle = loop.call_later(timeout, _release_waiter, waiter)
>         cb = functools.partial(_release_waiter, waiter)
>     
>         fut = ensure_future(fut, loop=loop)
>         fut.add_done_callback(cb)
>     
>         try:
>             # wait until the future completes or the timeout
>             try:
>                 await waiter
>             except exceptions.CancelledError:
>                 if fut.done():
>                     return fut.result()
>                 else:
>                     fut.remove_done_callback(cb)
>                     # We must ensure that the task is not running
>                     # after wait_for() returns.
>                     # See https://bugs.python.org/issue32751
>                     await _cancel_and_wait(fut, loop=loop)
>                     raise
>     
>             if fut.done():
>                 return fut.result()
>             else:
>                 fut.remove_done_callback(cb)
>                 # We must ensure that the task is not running
>                 # after wait_for() returns.
>                 # See https://bugs.python.org/issue32751
>                 await _cancel_and_wait(fut, loop=loop)
>                 # In case task cancellation failed with some
>                 # exception, we should re-raise it
>                 # See https://bugs.python.org/issue40607
>                 try:
>                     return fut.result()
>                 except exceptions.CancelledError as exc:
> >                   raise exceptions.TimeoutError() from exc
> E                   TimeoutError
> 
> /usr/lib/python3.11/asyncio/tasks.py:492: TimeoutError
> ------------------------------ Captured log setup 
> ------------------------------
> DEBUG    asyncio:selector_events.py:54 Using selector: EpollSelector
> ------------------------------ Captured log call 
> -------------------------------
> DEBUG    asyncio:selector_events.py:54 Using selector: EpollSelector
> ERROR    asyncio:base_events.py:1765 Exception in callback 
> AsyncioServerTest.handle_task(<Task finishe.../tasks.py:374>)
> handle: <Handle AsyncioServerTest.handle_task(<Task finishe.../tasks.py:374>) 
> created at /usr/lib/python3.11/asyncio/events.py:80>
> source_traceback: Object created at (most recent call last):
>   File "/usr/lib/python3.11/unittest/case.py", line 623, in run
>     self._callTestMethod(testMethod)
>   File "/usr/lib/python3.11/unittest/async_case.py", line 90, in 
> _callTestMethod
>     if self._callMaybeAsync(method) is not None:
>   File "/usr/lib/python3.11/unittest/async_case.py", line 112, in 
> _callMaybeAsync
>     return self._asyncioRunner.run(
>   File "/usr/lib/python3.11/asyncio/runners.py", line 118, in run
>     return self._loop.run_until_complete(task)
>   File "/usr/lib/python3.11/asyncio/base_events.py", line 640, in 
> run_until_complete
>     self.run_forever()
>   File "/usr/lib/python3.11/asyncio/base_events.py", line 607, in run_forever
>     self._run_once()
>   File "/usr/lib/python3.11/asyncio/base_events.py", line 1911, in _run_once
>     handle._run()
>   File "/usr/lib/python3.11/asyncio/events.py", line 80, in _run
>     self._context.run(self._callback, *self._args)
> Traceback (most recent call last):
>   File "/usr/lib/python3.11/asyncio/events.py", line 80, in _run
>     self._context.run(self._callback, *self._args)
>   File 
> "/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_pymodbus/build/test/test_server_asyncio.py",
>  line 155, in handle_task
>     result = result.result()
>              ^^^^^^^^^^^^^^^
>   File 
> "/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_pymodbus/build/pymodbus/server/async_io.py",
>  line 729, in serve_forever
>     self.protocol, self.endpoint = await self.loop.create_datagram_endpoint(
>                                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> TypeError: BaseEventLoop.create_datagram_endpoint() got an unexpected keyword 
> argument 'reuse_address'
> DEBUG    asyncio:base_events.py:676 Close <_UnixSelectorEventLoop 
> running=False closed=False debug=True>
> ______________ AsyncioServerTest.test_async_udp_server_send_data 
> _______________
> 
> fut = <Future cancelled created at 
> /usr/lib/python3.11/asyncio/base_events.py:427>
> timeout = 0.1
> 
>     async def wait_for(fut, timeout):
>         """Wait for the single Future or coroutine to complete, with timeout.
>     
>         Coroutine will be wrapped in Task.
>     
>         Returns result of the Future or coroutine.  When a timeout occurs,
>         it cancels the task and raises TimeoutError.  To avoid the task
>         cancellation, wrap it in shield().
>     
>         If the wait is cancelled, the task is also cancelled.
>     
>         This function is a coroutine.
>         """
>         loop = events.get_running_loop()
>     
>         if timeout is None:
>             return await fut
>     
>         if timeout <= 0:
>             fut = ensure_future(fut, loop=loop)
>     
>             if fut.done():
>                 return fut.result()
>     
>             await _cancel_and_wait(fut, loop=loop)
>             try:
>                 return fut.result()
>             except exceptions.CancelledError as exc:
>                 raise exceptions.TimeoutError() from exc
>     
>         waiter = loop.create_future()
>         timeout_handle = loop.call_later(timeout, _release_waiter, waiter)
>         cb = functools.partial(_release_waiter, waiter)
>     
>         fut = ensure_future(fut, loop=loop)
>         fut.add_done_callback(cb)
>     
>         try:
>             # wait until the future completes or the timeout
>             try:
>                 await waiter
>             except exceptions.CancelledError:
>                 if fut.done():
>                     return fut.result()
>                 else:
>                     fut.remove_done_callback(cb)
>                     # We must ensure that the task is not running
>                     # after wait_for() returns.
>                     # See https://bugs.python.org/issue32751
>                     await _cancel_and_wait(fut, loop=loop)
>                     raise
>     
>             if fut.done():
>                 return fut.result()
>             else:
>                 fut.remove_done_callback(cb)
>                 # We must ensure that the task is not running
>                 # after wait_for() returns.
>                 # See https://bugs.python.org/issue32751
>                 await _cancel_and_wait(fut, loop=loop)
>                 # In case task cancellation failed with some
>                 # exception, we should re-raise it
>                 # See https://bugs.python.org/issue40607
>                 try:
> >                   return fut.result()
> E                   asyncio.exceptions.CancelledError
> 
> /usr/lib/python3.11/asyncio/tasks.py:490: CancelledError
> 
> The above exception was the direct cause of the following exception:
> 
> self = <test.test_server_asyncio.AsyncioServerTest 
> testMethod=test_async_udp_server_send_data>
> 
>     async def test_async_udp_server_send_data(self):
>         """Test that the modbus udp asyncio server correctly sends data 
> outbound"""
>         BasicClient.dataTo = 
> b"x\01\x00\x00\x00\x00\x06\x01\x03\x00\x00\x00\x19"
> >       await self.start_server(do_udp=True)
> 
> test/test_server_asyncio.py:377: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> test/test_server_asyncio.py:181: in start_server
>     await asyncio.wait_for(self.server.serving, timeout=0.1)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> fut = <Future cancelled created at 
> /usr/lib/python3.11/asyncio/base_events.py:427>
> timeout = 0.1
> 
>     async def wait_for(fut, timeout):
>         """Wait for the single Future or coroutine to complete, with timeout.
>     
>         Coroutine will be wrapped in Task.
>     
>         Returns result of the Future or coroutine.  When a timeout occurs,
>         it cancels the task and raises TimeoutError.  To avoid the task
>         cancellation, wrap it in shield().
>     
>         If the wait is cancelled, the task is also cancelled.
>     
>         This function is a coroutine.
>         """
>         loop = events.get_running_loop()
>     
>         if timeout is None:
>             return await fut
>     
>         if timeout <= 0:
>             fut = ensure_future(fut, loop=loop)
>     
>             if fut.done():
>                 return fut.result()
>     
>             await _cancel_and_wait(fut, loop=loop)
>             try:
>                 return fut.result()
>             except exceptions.CancelledError as exc:
>                 raise exceptions.TimeoutError() from exc
>     
>         waiter = loop.create_future()
>         timeout_handle = loop.call_later(timeout, _release_waiter, waiter)
>         cb = functools.partial(_release_waiter, waiter)
>     
>         fut = ensure_future(fut, loop=loop)
>         fut.add_done_callback(cb)
>     
>         try:
>             # wait until the future completes or the timeout
>             try:
>                 await waiter
>             except exceptions.CancelledError:
>                 if fut.done():
>                     return fut.result()
>                 else:
>                     fut.remove_done_callback(cb)
>                     # We must ensure that the task is not running
>                     # after wait_for() returns.
>                     # See https://bugs.python.org/issue32751
>                     await _cancel_and_wait(fut, loop=loop)
>                     raise
>     
>             if fut.done():
>                 return fut.result()
>             else:
>                 fut.remove_done_callback(cb)
>                 # We must ensure that the task is not running
>                 # after wait_for() returns.
>                 # See https://bugs.python.org/issue32751
>                 await _cancel_and_wait(fut, loop=loop)
>                 # In case task cancellation failed with some
>                 # exception, we should re-raise it
>                 # See https://bugs.python.org/issue40607
>                 try:
>                     return fut.result()
>                 except exceptions.CancelledError as exc:
> >                   raise exceptions.TimeoutError() from exc
> E                   TimeoutError
> 
> /usr/lib/python3.11/asyncio/tasks.py:492: TimeoutError
> ------------------------------ Captured log setup 
> ------------------------------
> DEBUG    asyncio:selector_events.py:54 Using selector: EpollSelector
> ------------------------------ Captured log call 
> -------------------------------
> DEBUG    asyncio:selector_events.py:54 Using selector: EpollSelector
> ERROR    asyncio:base_events.py:1765 Exception in callback 
> AsyncioServerTest.handle_task(<Task finishe.../tasks.py:374>)
> handle: <Handle AsyncioServerTest.handle_task(<Task finishe.../tasks.py:374>) 
> created at /usr/lib/python3.11/asyncio/events.py:80>
> source_traceback: Object created at (most recent call last):
>   File "/usr/lib/python3.11/unittest/case.py", line 623, in run
>     self._callTestMethod(testMethod)
>   File "/usr/lib/python3.11/unittest/async_case.py", line 90, in 
> _callTestMethod
>     if self._callMaybeAsync(method) is not None:
>   File "/usr/lib/python3.11/unittest/async_case.py", line 112, in 
> _callMaybeAsync
>     return self._asyncioRunner.run(
>   File "/usr/lib/python3.11/asyncio/runners.py", line 118, in run
>     return self._loop.run_until_complete(task)
>   File "/usr/lib/python3.11/asyncio/base_events.py", line 640, in 
> run_until_complete
>     self.run_forever()
>   File "/usr/lib/python3.11/asyncio/base_events.py", line 607, in run_forever
>     self._run_once()
>   File "/usr/lib/python3.11/asyncio/base_events.py", line 1911, in _run_once
>     handle._run()
>   File "/usr/lib/python3.11/asyncio/events.py", line 80, in _run
>     self._context.run(self._callback, *self._args)
> Traceback (most recent call last):
>   File "/usr/lib/python3.11/asyncio/events.py", line 80, in _run
>     self._context.run(self._callback, *self._args)
>   File 
> "/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_pymodbus/build/test/test_server_asyncio.py",
>  line 155, in handle_task
>     result = result.result()
>              ^^^^^^^^^^^^^^^
>   File 
> "/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_pymodbus/build/pymodbus/server/async_io.py",
>  line 729, in serve_forever
>     self.protocol, self.endpoint = await self.loop.create_datagram_endpoint(
>                                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> TypeError: BaseEventLoop.create_datagram_endpoint() got an unexpected keyword 
> argument 'reuse_address'
> DEBUG    asyncio:base_events.py:676 Close <_UnixSelectorEventLoop 
> running=False closed=False debug=True>
> _________ AsyncioServerTest.test_async_udp_server_serve_forever_close 
> __________
> 
> fut = <Future cancelled created at 
> /usr/lib/python3.11/asyncio/base_events.py:427>
> timeout = 0.1
> 
>     async def wait_for(fut, timeout):
>         """Wait for the single Future or coroutine to complete, with timeout.
>     
>         Coroutine will be wrapped in Task.
>     
>         Returns result of the Future or coroutine.  When a timeout occurs,
>         it cancels the task and raises TimeoutError.  To avoid the task
>         cancellation, wrap it in shield().
>     
>         If the wait is cancelled, the task is also cancelled.
>     
>         This function is a coroutine.
>         """
>         loop = events.get_running_loop()
>     
>         if timeout is None:
>             return await fut
>     
>         if timeout <= 0:
>             fut = ensure_future(fut, loop=loop)
>     
>             if fut.done():
>                 return fut.result()
>     
>             await _cancel_and_wait(fut, loop=loop)
>             try:
>                 return fut.result()
>             except exceptions.CancelledError as exc:
>                 raise exceptions.TimeoutError() from exc
>     
>         waiter = loop.create_future()
>         timeout_handle = loop.call_later(timeout, _release_waiter, waiter)
>         cb = functools.partial(_release_waiter, waiter)
>     
>         fut = ensure_future(fut, loop=loop)
>         fut.add_done_callback(cb)
>     
>         try:
>             # wait until the future completes or the timeout
>             try:
>                 await waiter
>             except exceptions.CancelledError:
>                 if fut.done():
>                     return fut.result()
>                 else:
>                     fut.remove_done_callback(cb)
>                     # We must ensure that the task is not running
>                     # after wait_for() returns.
>                     # See https://bugs.python.org/issue32751
>                     await _cancel_and_wait(fut, loop=loop)
>                     raise
>     
>             if fut.done():
>                 return fut.result()
>             else:
>                 fut.remove_done_callback(cb)
>                 # We must ensure that the task is not running
>                 # after wait_for() returns.
>                 # See https://bugs.python.org/issue32751
>                 await _cancel_and_wait(fut, loop=loop)
>                 # In case task cancellation failed with some
>                 # exception, we should re-raise it
>                 # See https://bugs.python.org/issue40607
>                 try:
> >                   return fut.result()
> E                   asyncio.exceptions.CancelledError
> 
> /usr/lib/python3.11/asyncio/tasks.py:490: CancelledError
> 
> The above exception was the direct cause of the following exception:
> 
> self = <test.test_server_asyncio.AsyncioServerTest 
> testMethod=test_async_udp_server_serve_forever_close>
> 
>     async def test_async_udp_server_serve_forever_close(self):
>         """Test StarAsyncUdpServer serve_forever() method"""
> >       await self.start_server(do_udp=True)
> 
> test/test_server_asyncio.py:346: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> test/test_server_asyncio.py:181: in start_server
>     await asyncio.wait_for(self.server.serving, timeout=0.1)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> fut = <Future cancelled created at 
> /usr/lib/python3.11/asyncio/base_events.py:427>
> timeout = 0.1
> 
>     async def wait_for(fut, timeout):
>         """Wait for the single Future or coroutine to complete, with timeout.
>     
>         Coroutine will be wrapped in Task.
>     
>         Returns result of the Future or coroutine.  When a timeout occurs,
>         it cancels the task and raises TimeoutError.  To avoid the task
>         cancellation, wrap it in shield().
>     
>         If the wait is cancelled, the task is also cancelled.
>     
>         This function is a coroutine.
>         """
>         loop = events.get_running_loop()
>     
>         if timeout is None:
>             return await fut
>     
>         if timeout <= 0:
>             fut = ensure_future(fut, loop=loop)
>     
>             if fut.done():
>                 return fut.result()
>     
>             await _cancel_and_wait(fut, loop=loop)
>             try:
>                 return fut.result()
>             except exceptions.CancelledError as exc:
>                 raise exceptions.TimeoutError() from exc
>     
>         waiter = loop.create_future()
>         timeout_handle = loop.call_later(timeout, _release_waiter, waiter)
>         cb = functools.partial(_release_waiter, waiter)
>     
>         fut = ensure_future(fut, loop=loop)
>         fut.add_done_callback(cb)
>     
>         try:
>             # wait until the future completes or the timeout
>             try:
>                 await waiter
>             except exceptions.CancelledError:
>                 if fut.done():
>                     return fut.result()
>                 else:
>                     fut.remove_done_callback(cb)
>                     # We must ensure that the task is not running
>                     # after wait_for() returns.
>                     # See https://bugs.python.org/issue32751
>                     await _cancel_and_wait(fut, loop=loop)
>                     raise
>     
>             if fut.done():
>                 return fut.result()
>             else:
>                 fut.remove_done_callback(cb)
>                 # We must ensure that the task is not running
>                 # after wait_for() returns.
>                 # See https://bugs.python.org/issue32751
>                 await _cancel_and_wait(fut, loop=loop)
>                 # In case task cancellation failed with some
>                 # exception, we should re-raise it
>                 # See https://bugs.python.org/issue40607
>                 try:
>                     return fut.result()
>                 except exceptions.CancelledError as exc:
> >                   raise exceptions.TimeoutError() from exc
> E                   TimeoutError
> 
> /usr/lib/python3.11/asyncio/tasks.py:492: TimeoutError
> ------------------------------ Captured log setup 
> ------------------------------
> DEBUG    asyncio:selector_events.py:54 Using selector: EpollSelector
> ------------------------------ Captured log call 
> -------------------------------
> DEBUG    asyncio:selector_events.py:54 Using selector: EpollSelector
> ERROR    asyncio:base_events.py:1765 Exception in callback 
> AsyncioServerTest.handle_task(<Task finishe.../tasks.py:374>)
> handle: <Handle AsyncioServerTest.handle_task(<Task finishe.../tasks.py:374>) 
> created at /usr/lib/python3.11/asyncio/events.py:80>
> source_traceback: Object created at (most recent call last):
>   File "/usr/lib/python3.11/unittest/case.py", line 623, in run
>     self._callTestMethod(testMethod)
>   File "/usr/lib/python3.11/unittest/async_case.py", line 90, in 
> _callTestMethod
>     if self._callMaybeAsync(method) is not None:
>   File "/usr/lib/python3.11/unittest/async_case.py", line 112, in 
> _callMaybeAsync
>     return self._asyncioRunner.run(
>   File "/usr/lib/python3.11/asyncio/runners.py", line 118, in run
>     return self._loop.run_until_complete(task)
>   File "/usr/lib/python3.11/asyncio/base_events.py", line 640, in 
> run_until_complete
>     self.run_forever()
>   File "/usr/lib/python3.11/asyncio/base_events.py", line 607, in run_forever
>     self._run_once()
>   File "/usr/lib/python3.11/asyncio/base_events.py", line 1911, in _run_once
>     handle._run()
>   File "/usr/lib/python3.11/asyncio/events.py", line 80, in _run
>     self._context.run(self._callback, *self._args)
> Traceback (most recent call last):
>   File "/usr/lib/python3.11/asyncio/events.py", line 80, in _run
>     self._context.run(self._callback, *self._args)
>   File 
> "/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_pymodbus/build/test/test_server_asyncio.py",
>  line 155, in handle_task
>     result = result.result()
>              ^^^^^^^^^^^^^^^
>   File 
> "/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_pymodbus/build/pymodbus/server/async_io.py",
>  line 729, in serve_forever
>     self.protocol, self.endpoint = await self.loop.create_datagram_endpoint(
>                                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> TypeError: BaseEventLoop.create_datagram_endpoint() got an unexpected keyword 
> argument 'reuse_address'
> DEBUG    asyncio:base_events.py:676 Close <_UnixSelectorEventLoop 
> running=False closed=False debug=True>
> _________ AsyncioServerTest.test_async_udp_server_serve_forever_twice 
> __________
> 
> fut = <Future cancelled created at 
> /usr/lib/python3.11/asyncio/base_events.py:427>
> timeout = 0.1
> 
>     async def wait_for(fut, timeout):
>         """Wait for the single Future or coroutine to complete, with timeout.
>     
>         Coroutine will be wrapped in Task.
>     
>         Returns result of the Future or coroutine.  When a timeout occurs,
>         it cancels the task and raises TimeoutError.  To avoid the task
>         cancellation, wrap it in shield().
>     
>         If the wait is cancelled, the task is also cancelled.
>     
>         This function is a coroutine.
>         """
>         loop = events.get_running_loop()
>     
>         if timeout is None:
>             return await fut
>     
>         if timeout <= 0:
>             fut = ensure_future(fut, loop=loop)
>     
>             if fut.done():
>                 return fut.result()
>     
>             await _cancel_and_wait(fut, loop=loop)
>             try:
>                 return fut.result()
>             except exceptions.CancelledError as exc:
>                 raise exceptions.TimeoutError() from exc
>     
>         waiter = loop.create_future()
>         timeout_handle = loop.call_later(timeout, _release_waiter, waiter)
>         cb = functools.partial(_release_waiter, waiter)
>     
>         fut = ensure_future(fut, loop=loop)
>         fut.add_done_callback(cb)
>     
>         try:
>             # wait until the future completes or the timeout
>             try:
>                 await waiter
>             except exceptions.CancelledError:
>                 if fut.done():
>                     return fut.result()
>                 else:
>                     fut.remove_done_callback(cb)
>                     # We must ensure that the task is not running
>                     # after wait_for() returns.
>                     # See https://bugs.python.org/issue32751
>                     await _cancel_and_wait(fut, loop=loop)
>                     raise
>     
>             if fut.done():
>                 return fut.result()
>             else:
>                 fut.remove_done_callback(cb)
>                 # We must ensure that the task is not running
>                 # after wait_for() returns.
>                 # See https://bugs.python.org/issue32751
>                 await _cancel_and_wait(fut, loop=loop)
>                 # In case task cancellation failed with some
>                 # exception, we should re-raise it
>                 # See https://bugs.python.org/issue40607
>                 try:
> >                   return fut.result()
> E                   asyncio.exceptions.CancelledError
> 
> /usr/lib/python3.11/asyncio/tasks.py:490: CancelledError
> 
> The above exception was the direct cause of the following exception:
> 
> self = <test.test_server_asyncio.AsyncioServerTest 
> testMethod=test_async_udp_server_serve_forever_twice>
> 
>     async def test_async_udp_server_serve_forever_twice(self):
>         """Call on serve_forever() twice should result in a runtime error"""
> >       await self.start_server(do_udp=True, do_ident=True)
> 
> test/test_server_asyncio.py:356: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> test/test_server_asyncio.py:181: in start_server
>     await asyncio.wait_for(self.server.serving, timeout=0.1)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> fut = <Future cancelled created at 
> /usr/lib/python3.11/asyncio/base_events.py:427>
> timeout = 0.1
> 
>     async def wait_for(fut, timeout):
>         """Wait for the single Future or coroutine to complete, with timeout.
>     
>         Coroutine will be wrapped in Task.
>     
>         Returns result of the Future or coroutine.  When a timeout occurs,
>         it cancels the task and raises TimeoutError.  To avoid the task
>         cancellation, wrap it in shield().
>     
>         If the wait is cancelled, the task is also cancelled.
>     
>         This function is a coroutine.
>         """
>         loop = events.get_running_loop()
>     
>         if timeout is None:
>             return await fut
>     
>         if timeout <= 0:
>             fut = ensure_future(fut, loop=loop)
>     
>             if fut.done():
>                 return fut.result()
>     
>             await _cancel_and_wait(fut, loop=loop)
>             try:
>                 return fut.result()
>             except exceptions.CancelledError as exc:
>                 raise exceptions.TimeoutError() from exc
>     
>         waiter = loop.create_future()
>         timeout_handle = loop.call_later(timeout, _release_waiter, waiter)
>         cb = functools.partial(_release_waiter, waiter)
>     
>         fut = ensure_future(fut, loop=loop)
>         fut.add_done_callback(cb)
>     
>         try:
>             # wait until the future completes or the timeout
>             try:
>                 await waiter
>             except exceptions.CancelledError:
>                 if fut.done():
>                     return fut.result()
>                 else:
>                     fut.remove_done_callback(cb)
>                     # We must ensure that the task is not running
>                     # after wait_for() returns.
>                     # See https://bugs.python.org/issue32751
>                     await _cancel_and_wait(fut, loop=loop)
>                     raise
>     
>             if fut.done():
>                 return fut.result()
>             else:
>                 fut.remove_done_callback(cb)
>                 # We must ensure that the task is not running
>                 # after wait_for() returns.
>                 # See https://bugs.python.org/issue32751
>                 await _cancel_and_wait(fut, loop=loop)
>                 # In case task cancellation failed with some
>                 # exception, we should re-raise it
>                 # See https://bugs.python.org/issue40607
>                 try:
>                     return fut.result()
>                 except exceptions.CancelledError as exc:
> >                   raise exceptions.TimeoutError() from exc
> E                   TimeoutError
> 
> /usr/lib/python3.11/asyncio/tasks.py:492: TimeoutError
> ------------------------------ Captured log setup 
> ------------------------------
> DEBUG    asyncio:selector_events.py:54 Using selector: EpollSelector
> ------------------------------ Captured log call 
> -------------------------------
> DEBUG    asyncio:selector_events.py:54 Using selector: EpollSelector
> ERROR    asyncio:base_events.py:1765 Exception in callback 
> AsyncioServerTest.handle_task(<Task finishe.../tasks.py:374>)
> handle: <Handle AsyncioServerTest.handle_task(<Task finishe.../tasks.py:374>) 
> created at /usr/lib/python3.11/asyncio/events.py:80>
> source_traceback: Object created at (most recent call last):
>   File "/usr/lib/python3.11/unittest/case.py", line 623, in run
>     self._callTestMethod(testMethod)
>   File "/usr/lib/python3.11/unittest/async_case.py", line 90, in 
> _callTestMethod
>     if self._callMaybeAsync(method) is not None:
>   File "/usr/lib/python3.11/unittest/async_case.py", line 112, in 
> _callMaybeAsync
>     return self._asyncioRunner.run(
>   File "/usr/lib/python3.11/asyncio/runners.py", line 118, in run
>     return self._loop.run_until_complete(task)
>   File "/usr/lib/python3.11/asyncio/base_events.py", line 640, in 
> run_until_complete
>     self.run_forever()
>   File "/usr/lib/python3.11/asyncio/base_events.py", line 607, in run_forever
>     self._run_once()
>   File "/usr/lib/python3.11/asyncio/base_events.py", line 1911, in _run_once
>     handle._run()
>   File "/usr/lib/python3.11/asyncio/events.py", line 80, in _run
>     self._context.run(self._callback, *self._args)
> Traceback (most recent call last):
>   File "/usr/lib/python3.11/asyncio/events.py", line 80, in _run
>     self._context.run(self._callback, *self._args)
>   File 
> "/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_pymodbus/build/test/test_server_asyncio.py",
>  line 155, in handle_task
>     result = result.result()
>              ^^^^^^^^^^^^^^^
>   File 
> "/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_pymodbus/build/pymodbus/server/async_io.py",
>  line 729, in serve_forever
>     self.protocol, self.endpoint = await self.loop.create_datagram_endpoint(
>                                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> TypeError: BaseEventLoop.create_datagram_endpoint() got an unexpected keyword 
> argument 'reuse_address'
> DEBUG    asyncio:base_events.py:676 Close <_UnixSelectorEventLoop 
> running=False closed=False debug=True>
> =========================== short test summary info 
> ============================
> FAILED 
> test/test_examples.py::test_exp_async_framer[run_async_basic_calls-udp-ModbusSocketFramer-5024-30]
> FAILED 
> test/test_examples.py::test_exp_async_framer[run_async_basic_calls-udp-ModbusRtuFramer-5025-30]
> FAILED 
> test/test_examples.py::test_exp_async_framer[run_async_ext_calls-udp-ModbusSocketFramer-5024-30]
> FAILED 
> test/test_server_asyncio.py::AsyncioServerTest::test_async_start_udp_server
> FAILED 
> test/test_server_asyncio.py::AsyncioServerTest::test_async_udp_server_exception
> FAILED 
> test/test_server_asyncio.py::AsyncioServerTest::test_async_udp_server_receive_data
> FAILED 
> test/test_server_asyncio.py::AsyncioServerTest::test_async_udp_server_roundtrip
> FAILED 
> test/test_server_asyncio.py::AsyncioServerTest::test_async_udp_server_send_data
> FAILED 
> test/test_server_asyncio.py::AsyncioServerTest::test_async_udp_server_serve_forever_close
> FAILED 
> test/test_server_asyncio.py::AsyncioServerTest::test_async_udp_server_serve_forever_twice
> ERROR 
> test/test_server_asyncio.py::AsyncioServerTest::test_async_start_udp_server
> ERROR 
> test/test_server_asyncio.py::AsyncioServerTest::test_async_udp_server_exception
> ERROR 
> test/test_server_asyncio.py::AsyncioServerTest::test_async_udp_server_receive_data
> ERROR 
> test/test_server_asyncio.py::AsyncioServerTest::test_async_udp_server_roundtrip
> ERROR 
> test/test_server_asyncio.py::AsyncioServerTest::test_async_udp_server_send_data
> ERROR 
> test/test_server_asyncio.py::AsyncioServerTest::test_async_udp_server_serve_forever_close
> ERROR 
> test/test_server_asyncio.py::AsyncioServerTest::test_async_udp_server_serve_forever_twice
> ============= 10 failed, 433 passed, 7 errors in 65.04s (0:01:05) 
> ==============
> E: pybuild pybuild:388: test: plugin distutils failed with: exit code=1: cd 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_pymodbus/build; python3.11 -m pytest 
> test
> dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p 3.11 
> returned exit code 13


The full build log is available from:
http://qa-logs.debian.net/2023/01/13/pymodbus_3.0.0-5_unstable.log

All bugs filed during this archive rebuild are listed at:
https://bugs.debian.org/cgi-bin/pkgreport.cgi?tag=ftbfs-20230113;users=lu...@debian.org
or:
https://udd.debian.org/bugs/?release=na&merged=ign&fnewerval=7&flastmodval=7&fusertag=only&fusertagtag=ftbfs-20230113&fusertaguser=lu...@debian.org&allbugs=1&cseverity=1&ctags=1&caffected=1#results

A list of current common problems and possible solutions is available at
http://wiki.debian.org/qa.debian.org/FTBFS . You're welcome to contribute!

If you reassign this bug to another package, please mark it as 'affects'-ing
this package. See https://www.debian.org/Bugs/server-control#affects

If you fail to reproduce this, please provide a build log and diff it with mine
so that we can identify if something relevant changed in the meantime.

--- End Message ---
--- Begin Message ---
Source: pymodbus
Source-Version: 3.0.0-6
Done: Sebastian Ramacher <sramac...@debian.org>

We believe that the bug you reported is fixed in the latest version of
pymodbus, which is due to be installed in the Debian FTP archive.

A summary of the changes between this version and the previous one is
attached.

Thank you for reporting the bug, which will now be closed.  If you
have further comments please address them to 1028...@bugs.debian.org,
and the maintainer will reopen the bug report if appropriate.

Debian distribution maintenance software
pp.
Sebastian Ramacher <sramac...@debian.org> (supplier of updated pymodbus package)

(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing ftpmas...@ftp-master.debian.org)


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

Format: 1.8
Date: Sat, 21 Jan 2023 21:04:48 +0100
Source: pymodbus
Architecture: source
Version: 3.0.0-6
Distribution: unstable
Urgency: medium
Maintainer: Debian Python Team <team+pyt...@tracker.debian.org>
Changed-By: Sebastian Ramacher <sramac...@debian.org>
Closes: 1028793
Changes:
 pymodbus (3.0.0-6) unstable; urgency=medium
 .
   * Team upload
 .
   [ Bas Couwenberg ]
   * Add upstream patch to fix FTBFS with python3.11.
     (closes: #1028793)
Checksums-Sha1:
 75a06e3ed67f22be2fa22bcc5862c48753437ef6 2621 pymodbus_3.0.0-6.dsc
 e5373da303fe61433163cd7265b211d20b8275bc 7672 pymodbus_3.0.0-6.debian.tar.xz
Checksums-Sha256:
 abeb5bf7300fff19bea5ac23c1dfdb465f50e6dfad5ee710d19ec377f069c109 2621 
pymodbus_3.0.0-6.dsc
 c94159272ed7f4a721eca67996bcc15700bd7c0649594f707f9293c5d7c0005e 7672 
pymodbus_3.0.0-6.debian.tar.xz
Files:
 4064c9738246a56b6bb51b2c9c49c306 2621 python optional pymodbus_3.0.0-6.dsc
 83aa0b803989d02173b0ed0081646360 7672 python optional 
pymodbus_3.0.0-6.debian.tar.xz

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCgAdFiEE94y6B4F7sUmhHTOQafL8UW6nGZMFAmPMRg8ACgkQafL8UW6n
GZOywg//YGzJo2WtW7HmJOmPfJ6Inwvgy9KR26l8Dlt/CzS9kEXWQIrw2+Y4hicP
iE4Wb2fXWzTPPPIyCTCu40s+QR69ET4N6GOdRZxbKYcfrQkNRwy30gwILGrMRiKn
cJ/h81J7oUKX96C5JmbLj8ZHtxCUQiTHM1WLcGjZOfEz1NGh1sgAiEKiK2Ewl07/
6FQlwzP4li/1HC38B/+XcryM+GX9EzIOvZ/H6Cmfu+vOPQvoO3I86qegj+pZw8CV
aVSxbF/8/9XDJc4wKK1iAMzgPq0W6dj3OWA/75dSOXWmt6uhO627KuZNkYuuKZ/a
VAgg+a0Ivu9D48BlleXdC7H/XPGlKYjWZ98qv5SCXEhuUjNtmeWJoEj0se+BNmqo
zwriPOgdkQeUBZo+wbb+LtxqrPuByzy81BPpUIDZY9Bm9XABy9NH3CL+Zqn+TTH6
G7kAYI39aOPw1uClx5csckKbLD2KPmh09e1EcU2W+ZmV99J6HbnBHD2uh+ua84IT
m9dtzLLM5DUWyOBx94642DRbspgnG4CIG+Q698VoChLqcdYX9wFXJ1fkthhBEHRt
VW5aCWZGAPZ6pxTsVHMtbsXS68ysF3qK7MWS055s2zrwGovjJOnMvquJVuT59udZ
jEkZ7+K++W6DI9urUksWtBxFOFL/aiGA+AdXam/cjoI4wT3QlIQ=
=bhPK
-----END PGP SIGNATURE-----

--- End Message ---

Reply via email to