mirror of https://github.com/vacp2p/research.git
Remote log: make socket server non-blocking, allow multiple clients
This commit is contained in:
parent
2a1516743c
commit
798ccafd58
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue