Ah...so it it.
The behavior is still the same. The socket is stale and the server isn't responding. The DataLogic resets it, but doesn't issue a new request until two seconds later, and it does so on a new socket.
If there had been multiple minutes between comms to Do-more's Modbus/TCP server, we would have already timed out and dumped the connection. You can extend that, but the problem is still the same...the DataLogic device isn't doing anything to keep the connection fresh, it then sends a command, gets no response, and opens a new connection. I would think that for something like a scanner, which I would expect to have fairly infrequent comms, the preferred implementation would be to open the socket, transact business, then close the socket. Barring that, some form of keep alive would be prudent.
I have a nice little force-the-socket-closed hack in Do-more's stack to catch the condition where the remote connection gets closed unexpectedly. It wasn't pretty, but it was necessary to prevent this exact situation.