import std.concurrency : spawn;
import std.datetime : Clock, seconds;
import std.socket;
import core.thread : Thread;

void main() {
    import std.stdio : writeln;

    auto listener = new TcpSocket;
    listener.setOption(SocketOptionLevel.SOCKET, SocketOption.REUSEADDR, 1);
    listener.bind(new InternetAddress(8000));
    listener.listen(10);
    writeln("Listening on port 8000");

    while (true) {
        auto client = listener.accept;
        spawn(&handleConn, cast(shared(Socket)) client);
    }
}

void handleConn(shared(Socket) socket) {
    import std.format : format;

    auto client = cast(Socket) socket;
    scope (exit)
        client.close;
    while (true) {
        if (0 >= client.send(format!"%s\n"(Clock.currTime)))
            break;
        Thread.sleep(1.seconds);
    }
}
