Wenn ich öffne und eine Steckdose in die Nähe zum Beispiel AufrufGibt es ein Datei-Deskriptor-Leck, wenn Sockets auf einer Linux-Plattform verwendet werden?
Socket s = new Socket(...);
s.setReuseAddress(true);
in = s.getInputStream();
...
in.close();
s.close();
Linux stellt fest, dass diese Fassung noch offen ist oder zumindest der Dateideskriptor für die Verbindung ist presen. Wenn für diesen Prozess durch lsof die geöffneten Dateien abfragen, gibt es einen Eintrag für die geschlossene Verbindung:
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
java 9268 user 5u sock 0,4 93417 can't identify protocol
Dieser Eintrag bleibt, bis das Programm geschlossen wird. Gibt es einen anderen Weg, um den Sockel endlich zu schließen? Ich bin ein wenig besorgt, dass meine Java-Anwendung zu viele Dateideskriptoren blockieren kann. Ist das möglich? Oder behält Java diese Sockets, um sie wiederzuverwenden, selbst wenn ReuseAddress gesetzt ist?
Einverstanden - dies ist die erste zu überprüfende Sache. Und nach ein paar Minuten sollten die Sockets verschwinden, bevor Ihr Programm beendet wird. –
Der Autor sagt, dass die Einträge bleiben, bis das Programm schließt, obwohl ich denke, er gibt nicht an, ob das mehr als ein paar Minuten ist. –
Ja, ich sah das "Programm schließt" -Bit, war mir aber nicht sicher. –