Skip to content

Gotchas

Use this page only for library-specific caveats.

Shared SLMP setup, profile, point-limit, and end-code symptoms live in the shared SLMP Troubleshooting & Codes page. For profile limits and device availability, use the shared SLMP Profile Parameters page.

Current library-specific caveats

Area Symptom Guidance
IPv6 endpoint Connection options reject an IPv6 literal, or a hostname has no usable address. TCP and UDP are IPv4-only. Use an IPv4 literal or a hostname with an IPv4 result; only IPv4 resolver results are attempted.
Connection timeout A hostname with several IPv4 results returns timeout before every address receives a full timeout. The configured value is one absolute connection deadline covering DNS, all selected candidates, socket configuration, and adoption. Increase the one bound if the complete connection needs more time; candidates never reset it.
Request ordering Two async tasks sharing one PLC connection appear to run one request at a time. Clones share one FIFO queue and allow one wire transaction. Cancelling a waiting future sends nothing and removes its queue position. Separate clients are independent.
Cancelled request A request future is dropped or an outer tokio::time::timeout expires, and the next call reports that the transport is closed. This is intentional. A partial TCP frame or delayed UDP response cannot safely be reused, especially with 3E frames. Create and explicitly connect a new client; a state-changing command may already have reached the PLC, so do not automatically retry it.
Closed during a command close completes while active and queued calls fail. close immediately invalidates that client's connection generation. Incomplete active transmitted writes report OutcomeUnknown/Closed; queued calls report Closed without sending. A fully correlated and decoded success or PLC end code remains definitive.
Bit-in-word RMW A bit update can still race PLC logic or another connection. write_bit_in_word reserves one FIFO turn on this client, but the PLC read and write are two non-atomic commands. Treat a post-send failure as an unknown write outcome.
Named collection A required address cannot fit the named batch. read_named and each poll_named cycle emit one random-read request or fail before transport. LTN/LSTN current and LTS/LTC/LSTS/LSTC state entries require the Direct long-timer route and are rejected; use typed or explicit long-timer operations.
let (left, right) = tokio::join!(
    read_typed(&client, SlmpAddress::parse("D100", SlmpPlcProfile::IqR)?, "U"),
    read_typed(&client, SlmpAddress::parse("D101", SlmpPlcProfile::IqR)?, "U"),
);