Assuming the system is in the same network and not over a VPN:
I’ve had this issue with some applications before.
The likely issue is that they are not reading the socket correctly and assuming everything is in one packet rather than split across multiple packets. The result is the message is only half received and they get into a dodgy state. Its likely that if the system is written like this, they don’t log properly either, so it just sits there pretending all is good.
There’s two options for this:
Get them to fix their code so that it handles the reading and erroring correctly.
Write up a proc that closes the connection when the timeout expires.
To do it, check “Use DRIVERCTRL control” in the protocol properties.
In the Timeout Handling Reply Generation add a proc to create a close message and use the PROTO disposition on it, PROTO on the OB message id and KILL the message id.
proc gen_code_ob {args} {
keylget args MODE aMode
keylget args MSGID aMsgId
keylget args CONTEXT aContext
keylget args ARGS aArgs
global HciConnName
if {[string equal $aMode start]} {
return {}
}
if {[string equal $aMode run]} {
set myDispList {}
echo “$aMode $aMsgId $aContext”
switch $aContext {
reply_gen {
set myMsgId [msgcreate]
set myDriverCtl {}
keylset myDriverCtl CLOSE 1
keylset myDriverCtl WRITEZERO 0
msgmetaset $myMsgId DRIVERCTL $myDriverCtl
lappend myDispList “PROTO $myMsgId”
lappend myDispList “KILL $aMsgId”
if {[keylget args OBMSGID myObMsgId]} {
lappend myDispList “PROTO $myObMsgId”
}
}
}
return $myDispList
}
return {}
}