From 440f12a64b7aaf69cd85296b51448655ef383fec Mon Sep 17 00:00:00 2001 From: thegamecracks <61257169+thegamecracks@users.noreply.github.com> Date: Mon, 27 Oct 2025 11:29:03 -0400 Subject: [PATCH] fix: explicitly use remote addr for unicast UDP queries --- opengsq/protocol_socket.py | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/opengsq/protocol_socket.py b/opengsq/protocol_socket.py index f782ed3..4b883d2 100644 --- a/opengsq/protocol_socket.py +++ b/opengsq/protocol_socket.py @@ -152,16 +152,26 @@ async def communicate(protocol: ProtocolBase, data: bytes, source_port: int = No if source_port: udpClient.bind_port(source_port) udpClient.settimeout(protocol._timeout) - + + if protocol._allow_broadcast: + local_addr = ('0.0.0.0', source_port if source_port else 0) + remote_addr = None + sendto_addr = (protocol._host, protocol._port) + else: + local_addr = ('0.0.0.0', source_port) if source_port else None + remote_addr = (protocol._host, protocol._port) + sendto_addr = None + loop = asyncio.get_running_loop() transport, protocol_instance = await loop.create_datagram_endpoint( lambda: Socket.Protocol(protocol._timeout), # Use public Protocol class - local_addr=('0.0.0.0', source_port if source_port else 0), + local_addr=local_addr, + remote_addr=remote_addr, allow_broadcast=protocol._allow_broadcast ) - + try: - transport.sendto(data, (protocol._host, protocol._port)) + transport.sendto(data, sendto_addr) return await protocol_instance.recv() finally: transport.close() @@ -194,4 +204,4 @@ async def test_socket_async(): loop = asyncio.get_event_loop() loop.run_until_complete(test_socket_async()) - loop.close() \ No newline at end of file + loop.close()