Sven (κ): Socket Verbindung unter LINUX

Beitrag lesen

Hallo Shaheen,

ich habe unter SuSE über xinetd eine neue Socket-Verbindung auf einem bestimmten Port konfiguriert, die einfach ein Shell-Script aufruft, welcher etwas ausgibt, z. B. echo "gelungen".

Nein, du hast keine Socket-Verbindung konfiguriert, sonder das xinetd-Programm selber, welches sich um die Sockets kümmert. Dein Shellscript merkt davon gar nichts, stdin und stdout werden halt nur mal eben übers Iternet geschickt ;)

Von einem andren Rechner aus mittels PHP (fsockopen, fgets) habe ich anschl. eine Verbindung zu diesem Rechner unter dem freigeschalteten Port geöffnet und auch wirklich "gelungen" zurückgeliefert bekommen.

cool, ne? Das gleiche, nur etwas komplizierter habe ich vor einiger Zeit auch programmiert: Serverseite ein perl-PRogramm über xinetd, Clientseite ein PHP-Script. Können wunderbar nun miteinander kommunizieren (ich habe ein spezielles Protokoll dafür geschrieben).

Meine Frage ist, wie kann ich eigene Argumente über die Socket-Verbindung an den Shellscript senden, dort auswerten und entsprechend eine Antworte zurücksenden?

Hier mal ein (kleiner) Ausschnitt aus dem PHP-Programm:

function GetOneLine($fh) {
         $data = fgets($fh, 230);
         if(strlen($data) == 0 || $data == "\n") {
             print "(skipping blank line)\n";
             return '100 {Blank Line}';
         }
         print "<b>&gt;</b> $data";
         return $data;
     }

function SayLine($text, $encrypt=false) {
         #if(substr($text, 0, -1) != "\n") $text .= "\n"; // mit Leerzeile abschließen...
         global $nsock;
         $text = rtrim($text)."\n";
         print '<b>&lt;</b> '.($encrypt && !$GLOBAL['protodebug'] ? str_repeat('*', strlen($text))."\n" : $text);
         $r = fwrite($nsock, $text);
         return !$r ? die("<p><b>Fehler beim Schreiben ins Netzwerksocket!</b> (Text [$text] returned $r)</p>") : $r;
     }

Die Idee bei Sockets ist ja, dass man Netzwerkverbindungen wie Filehandles behandelt. Also lassen sich die ganzen f*()-"Tools" verwenden :)

Grüße,

Sven

--
ich hatte mal meterlange signs, die sind alle weg