hi,
ich habe nen kleinen java-server für mein linux system geschrieben. ich würde ihn gerne von inetd auf anfrage starten lassen, weil ich auf dem system auf dem er laufen soll sehr knapp an speicher bin. wenn ich ihn als daemon die ganze zeit nebenher laufen lasse funktioniert alles so wie es soll, aber wenn er über inetd gestartet wird nicht.
ist das überhaupt möglich diese verbindung von nativem code und java?
muss ich ein spezielles C API (via JNI) benutzen?
momentan loggt mein daemon nur fehler: er kann den socket nicht öffenen weil dieser noch von inetd belegt ist.
irgendwie muss ich doch von inetd den socket durchgereicht bekommen (der tcp handshake mit dem client ist ja schon gelaufen...). aber wie?
vielleicht gibt es jemanden unter euch der schonmal (wennauch vielleicht in einer anderen sprache als java) einen server der mit inetd zusammenarbeitet geschrieben hat und mir daher vielleicht ein paar tips geben kann?
hier ein paar auszüge:
/etc/inetd.conf:
controld stream tcp nowait root /usr/sbin/tcpd /usr/local/sbin/controld
/etc/hosts.allow:
controld: localhost
(die localhost einstellung ist nur zu testzwecken...)
und meine server logfile (d. h. schonmal das der server erfolgreich gestartet wird und anläuft):
14:38:18 Successfully loaded configuration...
14:38:18 Listening on port 3556
14:38:18 Address already in use
14:38:18 startup: IO Exception
14:38:18 Terminating connection and shutting down
kann mir da jemand von euch weiterhelfen?
vielen dank für die hilfe schonmal im voraus...
inetd und java (auch an nicht-java-leute gerichtet!)
inetd und java (auch an nicht-java-leute gerichtet!)
it's not a bug.... it's a feature!
No.
Das ist nicht sinnvoll. Selbst wenn es irgendwie mit JNI getrickse funktionieren wuerde, waere es sicherlich nicht im Namen des Erfinders.
Der inetd started fuer jeden Request einen eigenen Prozess: Das heisst fuer jeden Request eine eigene JVM. Das ist ziemlich viel Speicher, wenn mal mehrere Requests gleichzeitig bearbeitet werden. Zudem sind VMs auch immer nur einigermassen schnell wenn Sie schon laufen. Der Resourceverbrauch des Startens wuerde beim inetd in keinem Verhaeltnis mehr zum eigentlichen Resourcenverbrauch des Requests stehen.
Java Applikationen sind halt Speicherfresser
Sorry for that!
asac
Das ist nicht sinnvoll. Selbst wenn es irgendwie mit JNI getrickse funktionieren wuerde, waere es sicherlich nicht im Namen des Erfinders.
Der inetd started fuer jeden Request einen eigenen Prozess: Das heisst fuer jeden Request eine eigene JVM. Das ist ziemlich viel Speicher, wenn mal mehrere Requests gleichzeitig bearbeitet werden. Zudem sind VMs auch immer nur einigermassen schnell wenn Sie schon laufen. Der Resourceverbrauch des Startens wuerde beim inetd in keinem Verhaeltnis mehr zum eigentlichen Resourcenverbrauch des Requests stehen.
Java Applikationen sind halt Speicherfresser
Sorry for that!
asac