Zuviele TCP-Verbindungen

Status
Nicht offen für weitere Antworten.

rtt

Bekanntes Mitglied
Hallo,
ich habe einen Server geschrieben, der einige Socket-Verbindungen aufmacht. Danach sende ich meine Daten über diesen Socket und schließe den Strom und den Socket wieder.
Das funktioniert soweit ganz gut.
Nur wenn ich mir die TCP-Verbindungen (mit TCPView) ansehe, sind diese Verbindungen vom Status TIME_WAIT und werden erst nach einer gewissen Zeit wirklich beendet.

Das fürt zu meinem Problem.
Da ich innerhalb kurzer Zeit sehr viele Anfragen an den Server bekomme, werden auch innerhalb kurzer Zeit sehr viele TCP-Verbindungen geöffnet (und auch wieder geschlossen). Nun werden diese Verbindungen auf TIME_WAIT gesetzt und nach einer gewissen Zeit beendet. Allerdings werden während dieser Zeit weitere Verbindungen geöffnet.
So das sich nach einiger Zeit so viele Verbindungen auf TIME_WAIT befinden, das der Server die Arbeit einstellt.

Kann man diese Verbindungen sofort beenden (ich meine jetzt nicht mit close() ), so dass diese nicht erst einen Timeout abwarten?

Danke
Gruß Robin
 

Bleiglanz

Gesperrter Benutzer
na was jetzt? hast du einen eigenen Server geschrieben oder verwendest du den Apache...

ist übrigens normales Java-Verhalten, nach dem close noch ein bischen zu lauchen, abhilfe z.B. mit

Specify a linger-on-close timeout. This option disables/enables immediate return from a close() of a TCP Socket. Enabling this option with a non-zero Integer timeout means that a close() will block pending the transmission and acknowledgement of all data written to the peer, at which point the socket is closed gracefully. Upon reaching the linger timeout, the socket is closed forcefully, with a TCP RST. Enabling the option with a timeout of zero does a forceful close immediately. If the specified timeout value exceeds 65,535 it will be reduced to 65,535.

Valid only for TCP: SocketImpl

See Also:
Socket.setSoLinger(boolean, int), Socket.getSoLinger()

oder am Server mit SO_REUSEADDR
 

rtt

Bekanntes Mitglied
Hallo,
wenn ich Socket.setSoLinger(boolean, int) oder Socket.getSoLinger() verwende, bekomme ich immer eine SocketException, die sagt, das der Socket geschlossen ist.

Hier mal mein TestCode:
Code:
import java.io.*;
import java.net.*;


class SocketTest {
	
	public static void main(String[] args) {
		
		Socket sock            = null;
		OutputStreamWriter osw = null;
		String command         = "test";
		
		try {
			
			for (int i=0; i<10; i++) {
				sock = new Socket( "10.0.1.50", 80 );														
				osw  = new OutputStreamWriter( sock.getOutputStream(), "US-ASCII" );
				osw.write( command );											
				System.out.println( command );									
				
				osw.flush();													
				osw.close();
				
				System.out.println( sock.getSoLinger() ); 
				
				//sock.setSoLinger(true,0);
				
				// Socketverbindung schließen
				sock.close();
			}												
		}
		catch( IOException ioe ) {
			ioe.printStackTrace();
		}
	}		

}

Woran könnte das liegen. Welche Möglichkeiten gibt es noch?
 

rtt

Bekanntes Mitglied
Anscheinend liegt es am schließen des Streams.
Wenn man das weg lässt, funktioniert es mit setSoLinger(true,0);

Gruß Robin
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Datenverlust (zuviele Daten!) über Sockets Netzwerkprogrammierung 4
izoards Mehrere TCP Verbindungen auf einen Server [alles Local] Netzwerkprogrammierung 2
J Grundsätzliches zu SSL verschlüsselten Verbindungen Netzwerkprogrammierung 2
D Socket-Verbindungen übers Internet Netzwerkprogrammierung 4
I Offene Verbindungen lesen(Ressourcenmonitor lesen) Netzwerkprogrammierung 2
7 Mehrere Verbindungen gleichzeitig in einem Thread mit ApacheHTTP Netzwerkprogrammierung 7
G FTP FTP-Client funktioniert nicht bei Modem-Verbindungen Netzwerkprogrammierung 8
N Java NIO eingehende und ausgehende Verbindungen mit einem Selector Netzwerkprogrammierung 12
F Socket Verbindungen über mehrere Server Netzwerkprogrammierung 4
S RMI Polling oder lange Verbindungen Netzwerkprogrammierung 6
M Socket Leistungsfähigkeit eines xSocketservers, wieviele Verbindungen max? Netzwerkprogrammierung 4
D Aktuelle Anzahl der verfügbaren TCP/IP Verbindungen Netzwerkprogrammierung 6
E TCP-Server soll viele offene Verbindungen verwalten Netzwerkprogrammierung 12
D Was für Verbindungen mit Socket möglich? Netzwerkprogrammierung 2
J Nacheinander Verbindungen eingehen Netzwerkprogrammierung 2
A persistente, multi-threaded Verbindungen Netzwerkprogrammierung 12
S Verbindungen der Browser ermitteln? Netzwerkprogrammierung 9
G Windows-Verbindungen Netzwerkprogrammierung 4
G Proxy und mehrere Verbindungen Netzwerkprogrammierung 4
G Mehrere SSL Verbindungen Netzwerkprogrammierung 2
TRunKX Ein Port mehrere Verbindungen? Netzwerkprogrammierung 7
U Einen HandlerThread, der mehrere Verbindungen verwaltet? Netzwerkprogrammierung 2
F konfigurierte Netzwerkverbindunge/DFÜ-Verbindungen ermitteln Netzwerkprogrammierung 4
M Socket Verbindungen für einen Chat Netzwerkprogrammierung 10
D .jpg, .wav per ServerClient Verbindungen verschicken Netzwerkprogrammierung 8

Ähnliche Java Themen

Neue Themen


Oben