AWK
GNU Awk 4.1.4, API: 1.1 (GNU MPFR 4.0.1, GNU MP 6.1.2)
#!/usr/bin/gawk -f
BEGIN {
HttpService = "/inet/tcp/8848/0/0"
while(1){
print "HTTP/1.1 200 OK\r\nContent-length:56\r\nContent-Type: text/html; charset=UTF-8\r\n\r\n<!DOCTYPE html><html><body>Goodbye, world!</body></html>" |& HttpService
while((HttpService |& getline) > 0) 1
close(HttpService)
}
}
httperf --client=0/1 --server=localhost --port=8848 --uri=/ --send-buffer=4096 --recv-buffer=16384 --num-conns=100000 --num-calls=1 httperf: warning: open file limit > FD_SETSIZE; limiting max. # of open files to FD_SETSIZE Maximum connect burst length: 1 Total: connections 100000 requests 39360 replies 39360 test-duration 27.433 s Connection rate: 3645.3 conn/s (0.3 ms/conn, <=1 concurrent connections) Connection time [ms]: min 0.0 avg 0.7 max 10.1 median 0.5 stddev 0.5 Connection time [ms]: connect 0.3 Connection length [replies/conn]: 1.000 Request rate: 1434.8 req/s (0.7 ms/req) Request size [B]: 62.0 Reply rate [replies/s]: min 927.8 avg 1472.7 max 3534.0 stddev 1152.7 (5 samples) Reply time [ms]: response 0.1 transfer 0.0 Reply size [B]: header 78.0 content 56.0 footer 0.0 (total 134.0) Reply status: 1xx=0 2xx=39360 3xx=0 4xx=0 5xx=0 CPU time [s]: user 0.12 system 27.28 (user 0.5% system 99.5% total 99.9%) Net I/O: 274.6 KB/s (2.2*10^6 bps) Errors: total 60640 client-timo 0 socket-timo 0 connrefused 60640 connreset 0 Errors: fd-unavail 0 addrunavail 0 ftab-full 0 other 0
Bash
while true; do { echo 'HTTP/1.1 200 OK\r\nContent-length:56\r\nContent-Type: text/html; charset=UTF-8\r\n\r\n<!DOCTYPE html><html><body>Goodbye, world!</body></html>'; } | nc -l 18855 -q 1 > /dev/null; done
C
gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04)
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <err.h>
char response[] = "HTTP/1.1 200 OK\r\nContent-length:56\r\nContent-Type: text/html; charset=UTF-8\r\n\r\n<!DOCTYPE html><html><body>Goodbye, world!</body></html>";
int main()
{
int one = 1, client_fd;
struct sockaddr_in svr_addr, cli_addr;
socklen_t sin_len = sizeof(cli_addr);
int sock = socket(AF_INET, SOCK_STREAM, 0);
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(int));
int port = 8849;
svr_addr.sin_family = AF_INET;
svr_addr.sin_addr.s_addr = INADDR_ANY;
svr_addr.sin_port = htons(port);
bind(sock, (struct sockaddr *) &svr_addr, sizeof(svr_addr));
listen(sock, 5);
while (1)
{
client_fd = accept(sock, (struct sockaddr *) &cli_addr, &sin_len);
write(client_fd, response, sizeof(response) - 1);
close(client_fd);
}
}
httperf --client=0/1 --server=localhost --port=8849 --uri=/ --send-buffer=4096 --recv-buffer=16384 --num-conns=100000 --num-calls=1 httperf: warning: open file limit > FD_SETSIZE; limiting max. # of open files to FD_SETSIZE Maximum connect burst length: 1 Total: connections 100000 requests 100000 replies 100000 test-duration 5.021 s Connection rate: 19916.2 conn/s (0.1 ms/conn, <=1 concurrent connections) Connection time [ms]: min 0.0 avg 0.1 max 2.4 median 0.5 stddev 0.0 Connection time [ms]: connect 0.0 Connection length [replies/conn]: 1.000 Request rate: 19916.2 req/s (0.1 ms/req) Request size [B]: 62.0 Reply rate [replies/s]: min 19913.0 avg 19913.0 max 19913.0 stddev 0.0 (1 samples) Reply time [ms]: response 0.0 transfer 0.0 Reply size [B]: header 78.0 content 56.0 footer 0.0 (total 134.0) Reply status: 1xx=0 2xx=100000 3xx=0 4xx=0 5xx=0 CPU time [s]: user 0.06 system 4.95 (user 1.1% system 98.5% total 99.6%) Net I/O: 3812.1 KB/s (31.2*10^6 bps) Errors: total 0 client-timo 0 socket-timo 0 connrefused 0 connreset 0 Errors: fd-unavail 0 addrunavail 0 ftab-full 0 other 0
C#
.NET Core 2.2.203
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace Temp
{
class TEMP
{
static void Main()
{
while (true)
{
try
{
const string msg = "HTTP/1.1 200 OK\r\nContent-length:56\r\nContent-Type: text/html; charset=UTF-8\r\n\r\n<!DOCTYPE html><html><body>Goodbye, world!</body></html>";
TcpListener tcpListener = new TcpListener(IPAddress.Any, 8850);
tcpListener.Start();
while (true)
{
Socket socketConnection = tcpListener.AcceptSocket();
socketConnection.Send(Encoding.ASCII.GetBytes(msg.ToCharArray(), 0, msg.Length));
socketConnection.Disconnect(true);
}
}
catch()
{
// ignored
}
}
}
}
}
httperf --client=0/1 --server=localhost --port=8850 --uri=/ --send-buffer=4096 --recv-buffer=16384 --num-conns=100000 --num-calls=1 httperf: warning: open file limit > FD_SETSIZE; limiting max. # of open files to FD_SETSIZE Maximum connect burst length: 1 Total: connections 100000 requests 95476 replies 95453 test-duration 34.832 s Connection rate: 2870.9 conn/s (0.3 ms/conn, <=1 concurrent connections) Connection time [ms]: min 0.0 avg 0.0 max 34.6 median 0.5 stddev 0.2 Connection time [ms]: connect 0.0 Connection length [replies/conn]: 1.000 Request rate: 2741.1 req/s (0.4 ms/req) Request size [B]: 62.0 Reply rate [replies/s]: min 1624.1 avg 2977.8 max 6496.4 stddev 1827.6 (6 samples) Reply time [ms]: response 0.0 transfer 0.0 Reply size [B]: header 78.0 content 56.0 footer 0.0 (total 134.0) Reply status: 1xx=0 2xx=95453 3xx=0 4xx=0 5xx=0 CPU time [s]: user 8.25 system 26.56 (user 23.7% system 76.2% total 99.9%) Net I/O: 524.6 KB/s (4.3*10^6 bps) Errors: total 4547 client-timo 0 socket-timo 0 connrefused 4393 connreset 154 Errors: fd-unavail 0 addrunavail 0 ftab-full 0 other 0
Erlang
-module(main).
-export([main/0]).
main() ->
{ok, Listen} = gen_tcp:listen(8852,[binary, {packet, 0}, {reuseaddr, true}, {active, true}]),
do(Listen, gen_tcp:accept(Listen)),
gen_tcp:close(Listen).
do(Listen, {ok, Socket}) ->
receive
{tcp, Socket, _} ->
gen_tcp:send(Socket, <<"HTTP/1.1 200 OK\r\nContent-length:56\r\nContent-Type: text/html; charset=UTF-8\r\n\r\n<!DOCTYPE html><html><body>Goodbye, world!</body></html>">>),
gen_tcp:close(Socket)
end,
do(Listen, gen_tcp:accept(Listen)).
httperf --client=0/1 --server=localhost --port=8852 --uri=/ --send-buffer=4096 --recv-buffer=16384 --num-conns=100000 --num-calls=1 httperf: warning: open file limit > FD_SETSIZE; limiting max. # of open files to FD_SETSIZE Maximum connect burst length: 1 Total: connections 100000 requests 100000 replies 100000 test-duration 58.661 s Connection rate: 1704.7 conn/s (0.6 ms/conn, <=1 concurrent connections) Connection time [ms]: min 0.0 avg 0.6 max 7.5 median 0.5 stddev 0.4 Connection time [ms]: connect 0.5 Connection length [replies/conn]: 1.000 Request rate: 1704.7 req/s (0.6 ms/req) Request size [B]: 62.0 Reply rate [replies/s]: min 1127.7 avg 1289.4 max 2645.9 stddev 450.0 (11 samples) Reply time [ms]: response 0.1 transfer 0.0 Reply size [B]: header 78.0 content 56.0 footer 0.0 (total 134.0) Reply status: 1xx=0 2xx=100000 3xx=0 4xx=0 5xx=0 CPU time [s]: user 0.40 system 58.21 (user 0.7% system 99.2% total 99.9%) Net I/O: 326.3 KB/s (2.7*10^6 bps) Errors: total 0 client-timo 0 socket-timo 0 connrefused 0 connreset 0 Errors: fd-unavail 0 addrunavail 0 ftab-full 0 other 0
Free Pascal
program fuckfpws;
{$mode objfpc}{$H+}
uses Classes, fphttpserver;
Type TTestHTTPServer = Class(TFPHTTPServer)
public procedure HandleRequest(Var req:TFPHTTPConnectionRequest; Var res:TFPHTTPConnectionResponse); override;
end;
Var ws:TTestHTTPServer;
procedure TTestHTTPServer.HandleRequest(var req:TFPHTTPConnectionRequest; var res:TFPHTTPConnectionResponse);
Var F:TStringStream;
begin
F:=TStringStream.Create('Goodbye,World!');
res.ContentLength:=F.Size;
res.ContentStream:=F;
res.SendContent;
res.ContentStream:=Nil;
F.Free;
end;
begin
ws:=TTestHTTPServer.Create(Nil);
ws.Threaded:=False;
ws.Port:=18856;
ws.AcceptIdleTimeout:=1000;
ws.Active:=True;
ws.Free;
end.
Haskell
{-# LANGUAGE OverloadedStrings #-}
import Data.ByteString.Char8 ()
import Data.Conduit ( ($), yield )
import Data.Conduit.Network ( ServerSettings(..), runTCPServer )
main :: IO ()
main = runTCPServer (ServerSettings 8853 ["127.0.0.1"]) $ const (yield response $)
where response = "HTTP/1.0 200 OK\nContent-Length: 16\n\nGoodbye, World!\n"
Java
openjdk version “11.0.2” 2019-01-15
OpenJDK Runtime Environment (build 11.0.2+9-Ubuntu-3ubuntu118.04.3)
OpenJDK 64-Bit Server VM (build 11.0.2+9-Ubuntu-3ubuntu118.04.3, mixed mode, sharing)
javac 11.0.2
import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Main
{
public static void main(String[] args) throws IOException
{
ServerSocket listener = new ServerSocket(18849);
while(true)
{
Socket sock = listener.accept();
new PrintWriter(sock.getOutputStream(), true).println("HTTP/1.1 200 OK\r\nContent-length:56\r\nContent-Type: text/html; charset=UTF-8\r\n\r\n<!DOCTYPE html><html><body>Goodbye, world!</body></html>");
sock.close();
}
}
}
httperf --client=0/1 --server=localhost --port=18849 --uri=/ --send-buffer=4096 --recv-buffer=16384 --num-conns=100000 --num-calls=1 httperf: warning: open file limit > FD_SETSIZE; limiting max. # of open files to FD_SETSIZE Maximum connect burst length: 1 Total: connections 100000 requests 100000 replies 100000 test-duration 10.253 s Connection rate: 9752.9 conn/s (0.1 ms/conn, <=1 concurrent connections) Connection time [ms]: min 0.0 avg 0.1 max 28.3 median 0.5 stddev 0.2 Connection time [ms]: connect 0.1 Connection length [replies/conn]: 1.000 Request rate: 9752.9 req/s (0.1 ms/req) Request size [B]: 62.0 Reply rate [replies/s]: min 9605.8 avg 9739.9 max 9874.1 stddev 189.8 (2 samples) Reply time [ms]: response 0.0 transfer 0.0 Reply size [B]: header 78.0 content 56.0 footer 0.0 (total 134.0) Reply status: 1xx=0 2xx=100000 3xx=0 4xx=0 5xx=0 CPU time [s]: user 0.44 system 9.76 (user 4.3% system 95.2% total 99.5%) Net I/O: 1866.8 KB/s (15.3*10^6 bps) Errors: total 0 client-timo 0 socket-timo 0 connrefused 0 connreset 0 Errors: fd-unavail 0 addrunavail 0 ftab-full 0 other 0
Node.js
import http = require("http");
http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': "text/plain" });
res.end("Goodbye, World!");
}).listen(18851, "127.0.0.1");
Perl
use Socket;
my $port = 18852;
my $protocol = getprotobyname("tcp");
socket(SOCK, PF_INET, SOCK_STREAM, $protocol);
setsockopt(SOCK, SOL_SOCKET, SO_REUSEADDR, 1);
bind(SOCK, sockaddr_in($port, INADDR_ANY));
listen(SOCK, SOMAXCONN);
while(accept(CLIENT, SOCK))
{
print CLIENT "HTTP/1.1 200 OK\r\nContent-length:56\r\nContent-Type: text/html; charset=UTF-8\r\n\r\n<!DOCTYPE html><html><body>Goodbye, world!</body></html>";
close CLIENT;
}
Php
<?php
$socket = socket_create(AF_INET, SOCK_STREAM, 0);
socket_bind($socket, 0, 18853);
socket_listen($socket);
while (true) if ($client = @socket_accept($socket))
{
socket_write($client, "HTTP/1.1 200 OK\r\nContent-length:56\r\nContent-Type: text/html; charset=UTF-8\r\n\r\n<!DOCTYPE html><html><body>Goodbye, world!</body></html>");
socket_close($client);
}
Python
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('127.0.0.1', 18854))
s.listen(5)
while True:
c,a = s.accept()
c.send(b"HTTP/1.1 200 OK\r\nContent-length:56\r\nContent-Type: text/html; charset=UTF-8\r\n\r\n<!DOCTYPE html><html><body>Goodbye, world!</body></html>")
c.close()