websrv.bac

' Define HTTP constants
CONST New$ = CHR$(13) & NL$
CONST Sep$ = CHR$(13) & NL$ & CHR$(13) & NL$
CONST Msg$ = "<html><head>Hello from BaCon!</head></html>"

' Get our IP
Ip$ = "localhost"
PRINT "Connect from browser '", Ip$, ":51000'."

' Ignore child signals to avoid zombie processes
SIGNAL SIG_IGN, SIGCHLD

' Keep receiving requests
WHILE TRUE

    ' Open listening port
    OPEN Ip$ & ":51000" FOR SERVER AS mynet

    ' Incoming connection -> create background process
    spawn = FORK

    ' We are in the child
    IF spawn = 0 THEN

        ' Get the request
        REPEAT
            RECEIVE dat$ FROM mynet
            PRINT dat$
        UNTIL RIGHT$(dat$, 4) = Sep$

        ' Reply that we're OK
        SEND "HTTP/1.1 200 Ok" & New$ & "Content-Length: " & STR$(LEN(Msg$)) & Sep$ & Msg$ TO mynet

        ' Close connection
        CLOSE SERVER mynet

        ' End this process
        END

        ' We are in the parent
    ELIF spawn > 0 THEN

        ' Close connection in parent
        CLOSE SERVER mynet

    ENDIF
WEND

Generated by GNU Enscript 1.6.5.90.