diff --git a/remote_log/server.nim b/remote_log/server.nim index 78310a1..f1a5366 100644 --- a/remote_log/server.nim +++ b/remote_log/server.nim @@ -1,4 +1,4 @@ -import net, os +import net, os, nativesockets var server: Socket = newSocket() @@ -13,23 +13,36 @@ proc handler() {.noconv.} = setControlCHook(handler) server.setSockOpt(OptReuseAddr, true) +server.getFd().setBlocking(false) server.bindAddr(Port(1234)) server.listen() stdout.writeLine("Server started, listening to new connections on port 1234") -var client: Socket -var address = "" - -server.accept(client) -stdout.writeLine("Server: client connected") +var clients: seq[Socket] = @[] while true: + try: + var client: Socket = new(Socket) + server.accept(client) + clients.add(client) + stdout.writeLine("Server: client connected") + except OSError: + discard - let message: string = client.recvLine() + var clientsToRemove: seq[int] = @[] + for index, client in clients: + try: + let message: string = client.recvLine(timeout = 1) - if message == "": - break + if message == "": + clientsToRemove.add(index) - stdout.writeLine("Server: received from client: ", message) + stdout.writeLine("Server: received from client: ", message) + except TimeoutError: + discard + + for index in clientsToRemove: + clients.del(index) + stdout.writeLine("Server: client disconnected") server.close()