-- demo\rosetta\SimpleHttpServer.exw include builtins\sockets.e -- added for 0.8.1 (not yet documented) constant MAX_QUEUE = 100, ESCAPE = #1B, BUFFER_SIZE = 2048, buffer = allocate(BUFFER_SIZE), sock_addr = new_sock_addr(AF_INET, 8080, NULL), peerAddr = new_sock_addr(), response = substitute(""" HTTP/1.1 200 OK Content-Type: text/html; charset=UTF-8 Bye-bye baby bye-bye

Goodbye, world!

""","\n","\r\n") atom sock = socket(AF_INET,SOCK_STREAM,NULL) bind(sock,sock_addr) listen(sock,MAX_QUEUE) while get_key()!=ESCAPE do atom peer = accept(sock,peerAddr), ip = get_sin_addr(sock_addr) integer len = recv(peer,buffer,BUFFER_SIZE,0) string request = peek({buffer,len}) printf(1,"Client IP: %s\n%s\n",{ip_to_string(ip),request}) if length(request)>3 and request[1..4]="GET " then poke(buffer,response) send(peer,buffer,length(response),0) end if end while