Tag. Ich habe einen kleinen Webserver programmiert, den man leider mit dem Firefox folgendermaßen aus dem Tritt bringen kann:
(auf ubuntu) Man "surft" eine große Video-Datei an. Firefox fängt an die abzuspielen mit dem Totemplugin. Dann klickt man z.B. auf zurück. Firefox zeigt die voherige Seite. Mein Server aber hängt in der Schleife, die folgendermaßen aussieht:
Dabei ist FIS mein FileInputStream und OS mein vom Socket erhaltener OutputStream.
Ich habe mit Wireshark geschaut, was vor sich geht. Der Server erhält nach dem Klick auf Firefoxes zurück ein TCP Zero Window und reagiert mit Keep-Alive. Ich dachte nun, ich könnte ihm das Keep-Alive einfach mit socket.setKeepAlive(false) verbieten, aber das scheint nichts zu bewirken.
Jedenfalls kann ich das so oft machen, bis meine max. Anzahl an erlaubten Threads in ihren Schleifen hängen und dann ist der Server komplett lahm gelegt... :-(
Hat Jemand einen Rat?
(auf ubuntu) Man "surft" eine große Video-Datei an. Firefox fängt an die abzuspielen mit dem Totemplugin. Dann klickt man z.B. auf zurück. Firefox zeigt die voherige Seite. Mein Server aber hängt in der Schleife, die folgendermaßen aussieht:
Code:
byte b[] = new byte[1024];
while(FIS.available() > 0){
int act_read = FIS.read(b, 0, 1024);
OS.write(b, 0, act_read);
}
Ich habe mit Wireshark geschaut, was vor sich geht. Der Server erhält nach dem Klick auf Firefoxes zurück ein TCP Zero Window und reagiert mit Keep-Alive. Ich dachte nun, ich könnte ihm das Keep-Alive einfach mit socket.setKeepAlive(false) verbieten, aber das scheint nichts zu bewirken.
Jedenfalls kann ich das so oft machen, bis meine max. Anzahl an erlaubten Threads in ihren Schleifen hängen und dann ist der Server komplett lahm gelegt... :-(
Hat Jemand einen Rat?