Bind local UDP port to the command station port#12
Merged
Conversation
620cda1 to
f5dc0e9
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
A regression since v6.0.3: the v7
UdpTransportlets the OS pick an ephemeral local UDP port, whereas 6.0.3 bound the local socket to the command station's port. Some Z21 firmware sendsLAN_X_LOCO_INFObroadcasts to the command-station port (21105) rather than to the client's source port, so on an ephemeral local port those broadcasts are silently missed — system-state (sent to the source port) still arrives, but passive loco-info does not. Verified on hardware with Wireshark: loco-info packets were addressed to port 21105 / the controller's port, never to the ephemeral source port.Change
UdpTransportOptions.LocalPort(int?):null(default) binds the command station's port — restoring the 6.0.3 behaviour;0keeps an OS-assigned ephemeral port; any other value binds that port.UdpTransport.ConnectAsyncbindsLocalPort ?? RemoteEndPoint.Port.Debug:[RX]per datagram (UdpTransport),[FR]per append/emitted frame/partial/resync (Z21FrameReader), and[DISP] NO handler matchedfor frames no handler claims (Z21ResponseHandler).Tests
ConnectAsync_BindsConfiguredLocalPortasserts the transport sends from the configured local port.LocalPort = 0(loopback harness needs an ephemeral local port). Full solution suite green.