# Netzwerkprogrammierung: Broken Pipe



## Blandorin (30. Juli 2006)

Hallo,
ich habe ein Problem, welches mich an den Rand der Verzweifelung bringt. 

Ich habe ein Server-Programm in Java, welches mit Flash-Clienten in Verbindung steht. Das Programm läuft tagelang super, dann - ohne einen mir ersichtlichen Grund - hängt es sich auf. 
Das Problem tritt auf, wenn der Server einem Client Daten sendet:

java.net.SocketException: Broken pipe
	at java.net.SocketOutputStream.socketWrite0(Native Method)
	at java.net.SocketOutputStream.socketWrite(Unknown Source)
	at java.net.SocketOutputStream.write(Unknown Source)
	at sun.nio.cs.StreamEncoder$CharsetSE.writeBytes(Unknown Source)
	at sun.nio.cs.StreamEncoder$CharsetSE.implFlushBuffer(Unknown Source)
	at sun.nio.cs.StreamEncoder$CharsetSE.implFlush(Unknown Source)
	at sun.nio.cs.StreamEncoder.flush(Unknown Source)
	at java.iutputStreamWriter.flush(Unknown Source)
	at java.io.BufferedWriter.flush(Unknown Source)
	at spieler.send(spieler.java:345)
	at game.sendeAnAlle(game.java:1308)

Diese Exception wird erst ausgegeben, nachdem das Programm schon mehrere Minuten (die Zeit scheint variable zu sein?) "aufgehängt" ist. 

Einige Ursachen kann ich ausschließen:
- die verschickten Daten wurden zuvor schon an mehrere Clients gesendet - ohne Probleme
- Dem entsprechenden Client wurden erst wenige Sekunden zuvor andere Daten geschickt - ohne Problem

Ich weiß nicht mehr, woran es liegen kann. Ich kann den Fehler nicht reproduzieren... und das ganze tritt meist erst nach mehreren Stunden/Tagen Laufzeit auf.
Was mich auch verunsichert ist, dass die obige Exception erst ausgegeben wird, wenn das Programm schon lange Zeit "hing"...

Ich hoffe mir kann jemand weiterhelfen.. mir fällt nichts mehr ein  

Vielen Dank im Vorraus,
Blandorin


----------



## Thomas Darimont (8. August 2006)

Hallo!

Welches Betriebssystem verwendest du denn?

Gruß Tom


----------



## Blandorin (18. August 2006)

Hallo!
Das ganze läuft auf einem Linux Server mit Debian 3.1 Distribution.

Bei meiner Suche habe ich verschiedene ähnliche Fälle gefunden: 

http://forum.java.sun.com/thread.jspa?threadID=736391&tstart=105
http://www.velocityreviews.com/forums/t147965-deadlock-thread-dump-included.html



> Here's a deadlock that our chat server gets into every now and then.
> There's no fixed time. Sometimes it runs with 50-60 users for 6 hours
> and sometimes it crashes in 2 hours.



Ein Deadlock ist es meiner Ansicht nach nicht. Aber der Fehler ist ansonsten identisch.

Inzwischen habe ich den Buffered Writer rausgenommen und es läuft direkt über den OutputStream. Da es 3,4 Tage ohne Probleme lief, war ich ziemlich zuversichtlich, dass dort der Fehler lag. Allerdings kamen die Fehler inzwischen doch wieder.. 

Gruß Blandorin


----------



## Billie (20. August 2006)

Ich bin in letzter Zeit auch mit dieser Fehlermeldung in berührung gekommen. Und zwar bei dem Programm JUpload womit ein Kunde teilweise große Dateien auf einen FTP-Server lädt. Ich hab unter Windows ein großes File (60 MB) problemlos hochgeladen, aber der Kunde auf seinem Mac bekamm nach wenigen MB diese Fehlermeldung BrokenPipe.

Google verreit mir, dass es etwas mit der Arbeitsspeicher-Vergabe zu tun haben kann. Also dass dem Safari od. der JVM zu wenig Arbeitsspeicher zugesichert wurde. Mehr kann ich aber nicht dazu sagen, es wurde nie getestet.


----------

