InputStreamReader lässt TCP-Connection offen

Status
Nicht offen für weitere Antworten.

Giftstachel

Bekanntes Mitglied
Hallo liebe hardcoder ;)

ich bin grade über eine unstimmigkeit in meinem programm gestolpert, und hoffe auf einen guten tip von euch.

mir ist aufgefallen, das aus irgendwelchen gründen meine tcp-connections nicht von meinem programm geschlossen werden, sondern vom windows system.

ich nutze folgenden code:

Code:
        URL url = new URL(urlurl);
	Reader is = new InputStreamReader( url.openStream());    
	BufferedReader in = new BufferedReader( is );

zum öffnen eines inputstreams (htlm-connection)

und dann wie üblich

Code:
	in.close();
	is.close();

zum schließen.

dabei bleiben jedoch wie es scheint, die tcp-conns offen. wie kann ich das umgehen, verbessern, abändern, damit der mist nicht erst vom windoofhandler beendet wird.

(alle tcp-conns sind im status TIME_WAIT)

danke euch.
giftie
 
T

tuxedo

Gast
Hast du denn dadurch irgend welche Performance-Probleme?

Benutze ebenfalls eine UrlConnection und hab selbst bei einigen hundert http aufrufen keine Probleme damit.

- Alex
 

Giftstachel

Bekanntes Mitglied
probleme habe ich noch!!! nicht, dieses kann allerdings noch kommen, wenn ich aus irgend einem grunde das programm erweitern muss, und damit dann an die windowseigenen grenzen stoße. ich habe auch keine ahnung, in wie fern es unter umständen es zu einer portkollision kommen könnte, sollte mein prog parallel mehrfach gestartet werden. das windows system hab ich schon abgeändert, das er die conns nicht 180 sec offen lässt, sondern nach 30 sec zu macht. des weiteren würde ich es halt einfach gerne sauber programmieren, und sowas nicht dem betriebssystem überlassen ;)
 
T

tuxedo

Gast
Ich denke du musst dich fragen: Wieso ist es so wie es ist? Ich denke du bist nicht der erste der viele URL-Verbindungen benutzt die man nicht explizit schließen kann (zumindest hab ich auch noch keinen Weg gefunden). Es wird schon einen Grund haben warum es so ist wie es ist (auch wenn ich ihn nicht kenne, würd mich aber ebenfalls interessieren).

Das OS wird, so vermute ich (beweisen kann ichs nicht ;-) ), die offenen Verbindungen besser handhaben können als du. Von daher würd ich sagen: Das ist absolut unkritisch. Sonst wäre es vermutlich SUN schon aufgefallen und es gäbe ein "close()" in Verbindung mit der UrlConnection.

Nebenbei: Ich weiß nicht wie ein Browser das macht. Aber zumindest von Webservern her weiß ich, dass die die Verbindung von sich aus zumachen wenn sie nicht mehr gebraucht werden.
 

FArt

Top Contributor
Annahme: Betriebssystem Linux.

Das ist ein "Feature" des Betriebsystems. Die Zeit, wie lange eine Socket im TIME_WAIT noch bestehen bleibt ist dort konfigurierbar.

Tipp und wichtig: den close in einen finally-Block, damit auch in jedem Fall die Verbindung geschlossen wird!!!!!
 
T

tuxedo

Gast
Warum ist das denn ein Feature? Was hab ich davon? *unwissend bin*

Das mit dem "close()": Bei der UrlConnection, bzw. bei dem Fall den Giftstachel beschrieben hat, gibt es kein "close()". Genau das war/ist ja der Knackpunkt.

- Alex
 

Giftstachel

Bekanntes Mitglied
@FArt

gibts bei windows auch.

siehe registry:

System Key: [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
Value Name: TcpTimedWaitDelay
Data Type: REG_DWORD (DWORD Value)
Value Data: 30-300 seconds (decimal)

wenn man dort den entsprechenden schlüssel eingibt, klappt das wie bei linux.
das mit dem finally muss ich gleich mal ausprobieren. das ist ne gute idee.

@alex

das .close gibt es. schließ jedoch nur die url-connection, und den buffered-reader(wobei letzteres ein experiment ist, bei dem ich noch nicht nachweisen kann, ob das wirklich etwas bringt).
die tcp-verbindung ist vom closen jedoch vollkommen unabhängig.

von dem systembedingten closen der TCP's hast du, das du performancetechnisch in der gleichen zeit mehr verbindungen verwalten kannst, und somit systembedingt nicht so schnell an die grenzen des OS stößt.

hmm. vielleicht muss ich mich doch mal intensiver mit dem thema auseinandersetzen. prinzipiell müsste es ja auch genügen, wenn ich beim closen der verbindung den zustand time_wait in close_wait umwandel. mal nachguggen, ob ich da was finde.
 

FArt

Top Contributor
alex0801 hat gesagt.:
Warum ist das denn ein Feature? Was hab ich davon? *unwissend bin*

Das mit dem "close()": Bei der UrlConnection, bzw. bei dem Fall den Giftstachel beschrieben hat, gibt es kein "close()". Genau das war/ist ja der Knackpunkt.

- Alex

Für den Unwissenden sei der Hinweis zu Google gestattet... es gibt eine Welt außerhalb des Forums: http://www.google.de/search?hl=de&q=socket+time_wait&btnG=Google-Suche&meta=

Prinzipiell gilt: um Probleme mit Systemressourcen zu vermeiden muss der Entwicklerdiese immer konsistent frei geben (z.B. Streams schließen) wenn sie nicht mehr benötigt werden. Dies ist besonders wichtig, wenn ich mit abstrakten Klassen oder Interfaces arbeite. Die Implementierung darunter wird richtig entscheiden, was zu tun ist (echter close, zurück in den Pool, call ignorieren usw.).
Also bearbeite den Stream konsistent, die darunterliegende Connection (hier UrlConnection) wird schon tun was zu tun ist...
 

Giftstachel

Bekanntes Mitglied
Naja, so wie ich das bisher recherchiert habe, müsste ich anstatt des URL-Strams, den ich aufbaue, eine komplette kommunikation mit ports, und sockets entwerfen, um wirklich effektiv damit zu arbeiten. die url.close() schließt wirklich nur den stream, und gibt das closen der sockets ans OS zurück. An sich ziemlich seltsam, aber Sun wird sich dabei schon was gedacht haben.
mal sehen, wann ich zeit habe, mir da selber nen url-stream-socket-port-handler ^^ zu basteln. werd den dann gerne hier posten.
 
T

tuxedo

Gast
Giftstachel hat gesagt.:
Naja, so wie ich das bisher recherchiert habe, müsste ich anstatt des URL-Strams, den ich aufbaue, eine komplette kommunikation mit ports, und sockets entwerfen, um wirklich effektiv damit zu arbeiten.

Naja, implizit hab ich das ja schon am 03. 06. 2008, 9:03 geschrieben ;-)

- Alex
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Socket Problem mit InputStreamReader Netzwerkprogrammierung 3
X Socket [Anfänger] BufferedReader.readLine() lässt sich Zeit Netzwerkprogrammierung 1
F FTP FTPClient Datei lässt sich nicht öffnen Netzwerkprogrammierung 4
P Warum lässt sich mein Server und mein Client einfach nicht schließen?!?! Netzwerkprogrammierung 16
x46 Connection reset by peer: socket write error Netzwerkprogrammierung 6
F Probleme mit Connection Reset bei Telnet Verbindung Netzwerkprogrammierung 1
Thalion TCP Connection zu langsam Netzwerkprogrammierung 2
S Client Server Connection Netzwerkprogrammierung 4
C Handle Connection Problem Netzwerkprogrammierung 3
R Socket InputStream readObject > Connection Reset Netzwerkprogrammierung 3
L ssh connection; Zugriff auf 'screen' Prozess Netzwerkprogrammierung 5
C Client connection per Portforwarding auf einen lokalen Serverport Netzwerkprogrammierung 3
M Connection refused? Netzwerkprogrammierung 2
D Connection refused Netzwerkprogrammierung 3
B Client/Server Connection Problem Netzwerkprogrammierung 2
D Socket Socket absichtlich so schließen, dass Gegenseite java.net.SocketException: Connection reset wirft Netzwerkprogrammierung 4
C Socket Connection refused bei Internetverbindung - Welcher Port? Netzwerkprogrammierung 5
K Socket Exception Connection reset Netzwerkprogrammierung 9
VfL_Freak Socket SocketException: Connection reset Netzwerkprogrammierung 11
C Socket Socket: Connection timed out Netzwerkprogrammierung 3
T Empfangen klappt Senden nicht - Connection timed out Netzwerkprogrammierung 12
H java.net.ConnectException: Connection refused Netzwerkprogrammierung 3
Z Socket Connection reset by peer nur per IP nicht über localhost Netzwerkprogrammierung 13
RELAXccc HTTP Connection timed out: connect ?an was kann es liegen? Netzwerkprogrammierung 4
G Exception: Connection reset by peer: socket write error Netzwerkprogrammierung 2
N Socket verliert die Connection. Netzwerkprogrammierung 4
A UCP Connection über Proxy möglich? Netzwerkprogrammierung 7
M RMI - Connection Problem Netzwerkprogrammierung 7
trash HTTP Internet Connection bei Proxy ?! Netzwerkprogrammierung 3
D Client Server Problem, Methode readline() löst SocketException "Connection reset" aus Netzwerkprogrammierung 8
H RMI Connection refused bei RMI-Registry Netzwerkprogrammierung 10
S SSH-Connection - Auto-Vervollständigung mittels TAB Netzwerkprogrammierung 4
A Chatprogramm: Connection refused Netzwerkprogrammierung 4
T RMI RMI und VPN - callbackObject Connection refused Netzwerkprogrammierung 13
A Socket Client Server Connection wird aufgebaut aber keine daten geschickt. Netzwerkprogrammierung 5
J Connection Speed Test ohne Applet Netzwerkprogrammierung 5
0din Connection refused bei localhost?! Netzwerkprogrammierung 7
M FTP-Connection über FTP-Proxy Netzwerkprogrammierung 20
T Wie connection Reset abfragen/abfangen? Netzwerkprogrammierung 10
A RMI java.rmi.ConnectException: Connection refused to host: 1 Netzwerkprogrammierung 4
M chat funktioniert nicht (Connection refused: connect) Netzwerkprogrammierung 3
X URL connection Problem Netzwerkprogrammierung 3
R ConnectException: Connection refused to host: 192.168.1.4 ? Netzwerkprogrammierung 8
sparrow Connection Reset bei Webserver, Java WebStart als Client Netzwerkprogrammierung 9
tfa RMI-Problem: Connection refused to host: 127.0.0.2 Netzwerkprogrammierung 4
G Connection zu MySQL ohne ODBC Netzwerkprogrammierung 8
IT-MaD Connection reset by peer: socket write error Netzwerkprogrammierung 2
B RMI & Connection refused to host Netzwerkprogrammierung 12
G httpUnit: Connection timed out Netzwerkprogrammierung 3
lhein java.io.IOException: Unable to establish loopback connection Netzwerkprogrammierung 4
Paule Connection Applet Servlet ohne Socket bzw RMI Netzwerkprogrammierung 2
B Multithreaded Server: Connection reset Netzwerkprogrammierung 4
T JDBC Verbindungsabbruch (Connection reset) Netzwerkprogrammierung 2
M SocketException: Connection reset Netzwerkprogrammierung 10
G MAC / IP Connection Netzwerkprogrammierung 10
M Problem: connection abbrechen und login erkennen Netzwerkprogrammierung 2
M Umlaute gehen bei URL Connection verloren Netzwerkprogrammierung 6
M seltsam: java.net.SocketException: Connection reset Netzwerkprogrammierung 1
B RMI Connection Problem Netzwerkprogrammierung 13
T Dateien wia P2P Connection versenden Netzwerkprogrammierung 2
D Socketverbindung schlägt fehl - Connection refused: connect Netzwerkprogrammierung 4
H java.net.SocketException: Software caused connection abort Netzwerkprogrammierung 4
R FTP Connection zu Server Netzwerkprogrammierung 4
M Ausgangsport für FTp-Connection festlegen??? Netzwerkprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben