(reply from original poster) Thanks for taking your time to help me! >> I working on a device communication protocol using TCP with >> TWSocketServer and TWSocket. (Delphi XE Project) >> Small description: This device > Sorry don't understand what you are doing. > > Is this two ICS applications talking together as client and server, or > a physical device opening client connections to an ICS server? It's a communication device ( Mifare reader ) in one side. On the other
side my windows service with TWSocketServer. This device has 2 channels. The first channel connects and send initial data that I must respond. If the communication is right then the second channel kicks in and I must respond too. Only then the "session" is opened and I can start sending usefull commands. The first channel is very active and there's always some command or status sent to my server. The second channel on the other hand goes "idle" as soon as ended the initial communication, and can stay like that "for hours" (according to the vendor), but after 72 - 120 s the channels get closed and the "close request" is originated from "my side". Once the second channel gets closed, the device also closes channel 1 and I must restart the initialization protocol. Since the close request is originating from my side, it must be either my service or windows. Talking to the vendor they suggested me to configure SO_KEEPALIVE on my side. That's what i did, but still the connection closes after the same amount of time ( 72-120s). In the log I sent, notice that the normal communication goes from 12000 (external device port ) -> 3424 (internal device port) or from 12000 -> 3423. After a little more than a minute from ports 59216 ( SO port, each time that one changes ) a FIN is sent. But it's not me (or TWSocketserver). > > ICS does not have any automatic time outs, except in some of the > application servers, it's always obvious being a timer checking for > connection durations. But not in SocketServer itself. > > My long experience is sockets will stay open for days. Never tried to > use TCP KeepAlive, but from what you say it is being sent. As suggested by the device vendor I managed to set ICS so the socket gets configured with SO_KEEPALIVE. 20507 1164.435227 192.168.1.76 192.168.1.250 TCP 55 [TCP Keep-Alive] 12000 _ 3424 [ACK] Seq=6 Ack=17 Win=65536 Len=1 20508 1164.436457 192.168.1.250 192.168.1.76 TCP 66 [TCP Keep-Alive ACK] 3424 _ 12000 [ACK] Seq=17 Ack=7 Win=5840 Len=0 SLE=6 SRE=7 This is happening every 30s, so I guess the configuration I did is working. But still the connection is closed, and it's not by my application, but it's from my side. So I guess windows is closing it. I already deactivated my anti-virus and firewall as suggested by the vendor support team.But still no joy. With this particular vendor there's no "KeepAlive" command in their protocol, and they said SO_KEEPALIVE is the way to go. The funny thing is that channel 1 sends from time to time an IsAlive command that I must respond. Channel 2 just keeps idle until it gets closed. > > Angus > > > -- *Clément G. Doss* -- 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