Skip to content

Commit 6eb8c78

Browse files
Merge pull request #52 from thegamecracks/udpclient-remote-addr
fix: explicitly use remote addr for unicast UDP queries
2 parents 7ac83ed + 292f948 commit 6eb8c78

1 file changed

Lines changed: 13 additions & 3 deletions

File tree

opengsq/protocol_socket.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -159,15 +159,25 @@ async def communicate(protocol: ProtocolBase, data: bytes, source_port: int = No
159159
udpClient.bind_port(source_port)
160160
udpClient.settimeout(protocol._timeout)
161161

162+
if protocol._allow_broadcast:
163+
local_addr = ('0.0.0.0', source_port if source_port else 0)
164+
remote_addr = None
165+
sendto_addr = (protocol._host, protocol._port)
166+
else:
167+
local_addr = ('0.0.0.0', source_port) if source_port else None
168+
remote_addr = (protocol._host, protocol._port)
169+
sendto_addr = None
170+
162171
loop = asyncio.get_running_loop()
163172
transport, protocol_instance = await loop.create_datagram_endpoint(
164173
lambda: Socket.Protocol(protocol._timeout), # Use public Protocol class
165-
local_addr=("0.0.0.0", source_port if source_port else 0),
166-
allow_broadcast=protocol._allow_broadcast,
174+
local_addr=local_addr,
175+
remote_addr=remote_addr,
176+
allow_broadcast=protocol._allow_broadcast
167177
)
168178

169179
try:
170-
transport.sendto(data, (protocol._host, protocol._port))
180+
transport.sendto(data, sendto_addr)
171181
return await protocol_instance.recv()
172182
finally:
173183
transport.close()

0 commit comments

Comments
 (0)