Client hängtbei unterbrochener Netzwerkverbindung

Client hängtbei unterbrochener Netzwerkverbindung

am 30.08.2007 09:11:41 von spam

Hallo,

ich programmiere mit RealBasic unter Windows an einer Anwendung für
Druckereien. Ich habe zur Zeit ca. 50 Clients im Netz. Im Prinzip
funktioniert alles bestens, bis auf eine unschöne Sache.

Wenn die Netzwerkverbindung eines Clients mal "hart" unterbrochen wird
(Netzkabel raus, Kabel im Serverschrank wird umgesteckt oder Switch
fällt aus), friert die gesamte Anwendung ein.

Ich bin mir sicher, dass die Ursache dafür im MySQL-Plugin zu suchen
ist, welches das Interface für die TCP-Netzwerkverbindung bereitstellt.
Das Problem tritt nämlich nicht auf, wenn ich z.B. den MySQL-Server
herunterfahre oder diesen "hart" vom Netz trenne - das kann ich
programmintern mit einer eigenen Timeout-Routine abfangen.

Soweit ich in Erfahrung bringen konnte, beruht auch das RB-Plugin auf
"libmysql"-Code. Gibts irgend eine Möglichkeit, das "Festfressen" zu
unterbinden? Danke für Tips.

Frank

Re: Client hängtbei unterbrochener Netzwerkverbindung

am 30.08.2007 09:19:45 von Andreas Kretschmer

Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de

Re: Client hängtbei unterbrochener Netzwerkverbindung

am 30.08.2007 10:46:05 von Sven Paulus

Andreas Kretschmer wrote:
>> Das Problem tritt nämlich nicht auf, wenn ich z.B. den MySQL-Server
>> herunterfahre oder diesen "hart" vom Netz trenne - das kann ich
> Wo soll der Unterschied sein, ob ich am Client den Netzstecker ziehe
> oder am Server?

Je nach OS koennte ich mir im ersteren Fall vorstellen, dass das Interface
runtergefahren wird, wenn der Link weg ist, und wenn dann lokal keine Rout=
e
zum Ziel mehr existiert, bestehende TCP-Verbindungen gedroppt werden.

Re: Client hängtbei unterbrochener Netzwerkverbindung

am 30.08.2007 10:47:20 von Axel Schwenke

spam@ghostlink.de (Frank Esselbach) wrote:
>
> ich programmiere mit RealBasic unter Windows an einer Anwendung für
> Druckereien. Ich habe zur Zeit ca. 50 Clients im Netz. Im Prinzip
> funktioniert alles bestens, bis auf eine unschöne Sache.
>
> Wenn die Netzwerkverbindung eines Clients mal "hart" unterbrochen wird
> (Netzkabel raus, Kabel im Serverschrank wird umgesteckt oder Switch
> fällt aus), friert die gesamte Anwendung ein.

Ich vermute, du willst hier sagen "bleibt die Client-Anwendung beim
nächsten Zugriff auf den MySQL-Server für sehr lange Zeit stehen, bis
sie mit einem Timeout-Fehler abbricht".

Ja, das ist wohl so. Bei einer "ungeplanten" Unterbrechung des Netz-
werks (im Unterschied zum geplanten Shutdown des MySQL-Servers) bleiben
die Netzwerkverbindungen in einem unbekannten Zustand; so lange bis
einer der Beteiligten nicht länger warten will.

> Soweit ich in Erfahrung bringen konnte, beruht auch das RB-Plugin auf
> "libmysql"-Code. Gibts irgend eine Möglichkeit, das "Festfressen" zu
> unterbinden? Danke für Tips.

http://dev.mysql.com/doc/refman/5.0/en/mysql-options.html

MYSQL_OPT_CONNECT_TIMEOUT
MYSQL_OPT_READ_TIMEOUT
MYSQL_OPT_WRITE_TIMEOUT

Außerdem kann der TCP-Stack kaputte Verbindungen mittels TCP-Keepalive
erkennen und der Applikation signalisieren.

Wie du das aber dem RB-Plugin verklickerst, vermag ich nicht zu sagen.


XL

Re: Client hängtbei unterbrochener Netzwerkverbindung

am 30.08.2007 12:45:11 von spam

> Wo soll der Unterschied sein, ob ich am Client den Netzstecker ziehe
> oder am Server?
>
Beim entfernen des Netzwerksteckers am Client wird nicht nur die
Nachrichtenverbindung gekappt, sondern auch die physisch/elektrische
Netzwerkverbindung am NIC.

Wenn ich den Server trenne, antwortet der zwar nicht mehr, aber das
Interface des Clients hängt immer noch z.B. an einem Switch ...

Könnte auch sein, dass das Problem weiter unten im System begraben
liegt.

Frank

Re: Client hängt bei unterbrochener Netzwerkverbindung

am 31.08.2007 14:07:01 von Hartmut Holzgraefe

Sven Paulus wrote:
> Je nach OS koennte ich mir im ersteren Fall vorstellen, dass das Interf=
ace
> runtergefahren wird, wenn der Link weg ist, und wenn dann lokal keine R=
oute
> zum Ziel mehr existiert, bestehende TCP-Verbindungen gedroppt werden.

ja, insb. MacOS X ist da ganz groß drin ... :/