Deutsch English
Alphabetischer Index
Array-Funktionen
CGI-Funktionen
Datentypen
Datums/Uhrzeit-Funktionen
Debugging
Operatoren
Ramtext-Funktionen
Selektion
Socket-Funktionen
  • closesock()
  • getsock()
  • opensock()
  • putsock()
  • server()
    Sonstige-Funktionen
    Sprachelemente
    Statistik-Funktionen
    Stream-Funktionen
    String-Funktionen
    System-Funktionen
    Tabellen-Funktionen
    Text-Funktionen
    Volltext-Funktionen
    Zahlen-Funktionen
    Home    Überblick    Suche    Impressum    Kontakt    Mitglieder
    Themenkomplex Socket-Funktionen
    Funktion server()
    Kurz Installiert einen Multi-Prozess-Server
    Syntax server(iPort : INTEGER;Prozess : PROZEDUR;iMaxConnections[,iModus] : INTEGER) : INTEGER
    Parameter iPort: TCP-Port für eingehende Verbindungen
    Prozess : parameterlose EASY-Prozedur
    iMaxConnections : maximale Anzahl von Verbindungen (Sockets) für den Server
    iModus : 0 (Vorgabe) -> Single-Process, 1 (nur Linux/FreeBSD) -> Multi-Process (forked)
    Ergebnis Die Funktion liefert nur dann ein Ergebnis, wenn sie terminiert, was sie eigentlich nicht machen sollte. In diesem Fall ist das Funktionsergebnis der Fehlercode des Betriebssystems:

    13: Öffnen des privilegierten Ports verboten
    98: Port bereits belegt
    Siehe auch:
    getsock() putsock() write() read()
    Beschreibung

    Wenn "server" ausgeführt wird, wartet die tdbenine auf eingehende TCP-Verbindungen am angegeben Port. Wird eine Verbindung aufgebaut, so wird die angegebene Prozedur ausgeführt. Innerhalb dieser Prozedur sind zwei Handles verfügbar:

    TextHandle 128

    SocketHandle 128

    Beide Handles können zur Kommunikation mit dem Klienten verwendet werden. Allerdings sollte man darauf achten, dass für das Lesen und Schreiben (bzw. Empfangen und Senden) nur jeweils eines der beiden Handles verwendet wird, vorzugsweise das Socket-Handle (weil Textoperationen immer gepuffert werden).

    Ist die Funktion server aktiv, so werden alle CGI-Ausgaben (CGIWrite, CGIWriteln, CGIWriteTemplate) auf dem Server-Socket ausgeführt.

    Wenn die Prozedur beendet wird, wird die Verbindung zum Klienten beendet und das ganze Spiel beginnt von vorne, es sei denn, die Environment-Variable STOP_SERVER wird auf TRUE gesetzt.

    Bei erfolgreicher Verbindung wird ein Kind-Prozess gestartet , der die Verbindung übernimmt. Der Vaterprozess steht somit sofort wieder bereit, weitere Verbindungen anzunehmen. Schließlich wird die Prozedur Prozess ausgeführt. Wird diese beendet, so wird auch die Verbindung zum Klienten geschlossen und der Kind-Prozess beendet. Dieser bleibt allerdings zunächst als Zombie im Speicher. Allerdings räumt die tdbengine bei jedem neuen Verbindungsaufbau eventuel vorhandene Zombies auf.

    Was kann man damit machen?

    Ein Beispiel: Mini-Web-Server für Einzelplatz- und CD-Applikationen


    Beispiel 1: Server

    Kleine "Echo"-Server, der auf TCP-Port 3444 lauscht

    PROCEDURE try
    VAR s : STRING
      writeln(128,'Hello '+getenv('REMOTE_ADDR')+', here is the server...')
      REPEAT
        s:=readln(128)
        writeln(128,s)
      UNTIL s='quit'
    ENDPROC
    
    PROCEDURE Main
      cgiclosebuffer
      server(3444,try,1)
    ENDPROC


    tdbengine chat
    irc.tdbengine.org
    #tdbengine

       Copyright © 2003-2004 tdb Software Service GmbH
       Alle rechte vorbehalten. / All rights reserved
       Letzte Änderung: 21.10.2004
    {Fehler für :execmacro{execmacro="sessionspy"}