More info concerning my original problem which is ... My application uses a TTnCnx client object to connect (hundreds of times per day) to a remote device to retrieve data. On rare occasions the pair seem to get stuck in a connected state and stay there indefinitely.
The normal procedure is to call SendMsg which calls Connect. OnConnection, write the outgoing message. When a response is received, call ClosePort. If no response, MsgTimeout. {As I write this I see one problem, I don't call Close in the timeout procedure. Yet, after several failures, I would still call NewTelnetClient which I would expect to get me out of the hung state} See any other obvious issues? Any problem calling Free immediately after Close in FreeTelnetClient? Mike procedure TTLS350E.SendMsg(Msg: string); begin try if assigned(TelnetClient) then begin TxTCPBuffer := Msg; if TelnetClient.IsConnected = True then begin { connection is already active } WriteToTelnet(Msg); end else begin { got to get a connection } TelnetClient.Connect; end; end; except ShowNewMessage( 'Exception handled in TCP SendMsg'); end; end; procedure TTLS350E.ClosePort; begin TelnetClient.Close; end; procedure TTLS350E.MsgTimeout(Sender: TObject); begin inc(PortRebuildCount); if PortRebuildCount >= TLS350_TIMEOUTS_RESET then begin PortRebuildCount := 0; NewTelnetClient; end; end; procedure TTLS350E.FreePort; // This should only be called from Destroy begin FreeTelnetClient; end; procedure TTLS350E.FreeTelnetClient; var tmpTelnet: TTnCnx; begin if assigned(TelnetClient) then begin // if TCP client exists, kill it tmpTelnet := TelnetClient; tmpTelnet.Close; tmpTelnet.Free; TelnetClient := nil; end; end; // The following function is called only after multiple // message failures. // build a new Telnet object procedure TTLS350E.NewTelnetClient; begin FreeTelnetClient; TelnetClient := TTnCnx.Create(Application.MainForm); TelnetClient.OnDataAvailable := TnCnxDataAvailable; TelnetClient.OnSessionClosed := TnCnxSessionClosed; TelnetClient.OnSessionConnected := TnCnxSessionConnected; TelnetClient.Port := IntToStr(MyConfig.GetPort); TelnetClient.Host := MyConfig.GetIP; end; -- To unsubscribe or change your settings for TWSocket mailing list please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket Visit our website at http://www.overbyte.be