Subject Re: [firebird-support] FB 1.5 Connection lost problem
Author Helen Borrie
At 06:01 PM 15/08/2004 -0700, you wrote:
>On 8/13/2004 at 5:48 AM dirknaudts wrote:
>
> > I'm setting up up a project on a customer's Server (Redhat Advanced
> > Server 2.1 on Compaq Proliant Server), FB1.5 SS
>
> >
> > ISC ERROR CODE:335544721
> >
> > ISC ERROR MESSAGE:
> > Unable to complete network request to host "192.168.0.247".
> > Error writing data to the connection.
> > An established connection was aborted by the software in your host
> > machine.
> >
> > This error only occurs after having been connected for some time
> > (sometimes minutes, sometimes hours) so in the beginning all apps are
> > working fine.
>
>This seems to be either a 'feature' of Linux or something inside the Linux
>version of Firebird. I see this on my Linux Server as well (Fedora Core
>2). I have never seen it happen with Firebird running under Windows. It
>is simple to duplicate: on a client machine, run isql, connect to a
>database, play with it (show tables, whatever), then leave isql alone for
>a while. Next time you try to issue a command via that isql session, it
>will freeze for a while and then finally report that the server connection
>was terminated. I have no explanation for it at this time, but find it
>very highly annoying.... In one's own code, one could certainly set up a
>periodic 'keepalive' request, but of course that won't work in isql.

I don't observe this at all with either RedHat 8 (running 1.5.1 Classic) or
Mandrake 9.1 (currently running 1.5.0). I don't have DHCP running on
either server - all IP addresses used by Firebird clients are statically
configured in the hosts files of servers and clients and connections never
time out.

Likewise, I use the same tactic to prevent DHCP on the Windows servers from
stealing IP addresses that Firebird clients use.

Have a look to see what Fedora's settings are for the tcp_keepalive
parameters. AFAIK, they interact this way:
tcp_keepalive_time = s
tcp_keepalive_intvl = i
tcp_keepalive_probes = p
As I understand it, after 3 * (s + i) seconds of idle time at that IP
address, the socket will be considered dead and will be disconnected,
releasing the IP address back to the pool. (But check this in the man files
and also look in the firebird log for the exact inet error code that occurred).

Once the network connection is gone, the Fb server will detect it and begin
to release the artifacts associated with the dead connection.

/heLen