Remote log: make socket server non-blocking, allow multiple clients

This commit is contained in:
Oskar Thoren 2019-08-03 15:20:39 +08:00
parent 2a1516743c
commit 798ccafd58
No known key found for this signature in database
GPG Key ID: B2ECCFD3BC2EF77E
1 changed files with 23 additions and 10 deletions

View File

@ -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()