Deutsch English
Alphabetical index
Array functions
CGI functions
Data types
Date functions
Debugging
Fulltext functions
Language elements
Numerical functions
Operators
Other functions
Ramtext functions
Selecting
Socket functions
  • closesock()
  • getsock()
  • opensock()
  • putsock()
  • server()
    Statistical functions
    Stream functions
    String functions
    System functions
    Table functions
    Text functions
    Home    Overview    Search    Impressum    Contact    Members
    Topic complex Socket functions
    Function server()
    Short 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)
    Return 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
    See also:
    getsock() putsock() write() read()
    Description

    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


    Example 1: Server

    Tiny "echo" server listening on TCP port 3444

    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


    User comments:
    Write a comment:
    Name
    EMail
    Subject
    Text (Switch mode)

    Choose between
    the normal and the
    advanced editor.
    The advanced editor
    runs in IE 5+ and
    Mozilla 1.4+ only
    SPAM-Protection Please enter tdbengine in this field.

    tdbengine chat
    irc.tdbengine.org
    #tdbengine

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