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()
|
var server: Socket = newSocket()
|
||||||
|
|
||||||
|
@ -13,23 +13,36 @@ proc handler() {.noconv.} =
|
||||||
setControlCHook(handler)
|
setControlCHook(handler)
|
||||||
|
|
||||||
server.setSockOpt(OptReuseAddr, true)
|
server.setSockOpt(OptReuseAddr, true)
|
||||||
|
server.getFd().setBlocking(false)
|
||||||
server.bindAddr(Port(1234))
|
server.bindAddr(Port(1234))
|
||||||
server.listen()
|
server.listen()
|
||||||
stdout.writeLine("Server started, listening to new connections on port 1234")
|
stdout.writeLine("Server started, listening to new connections on port 1234")
|
||||||
|
|
||||||
var client: Socket
|
var clients: seq[Socket] = @[]
|
||||||
var address = ""
|
|
||||||
|
|
||||||
server.accept(client)
|
|
||||||
stdout.writeLine("Server: client connected")
|
|
||||||
|
|
||||||
while true:
|
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 == "":
|
if message == "":
|
||||||
break
|
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()
|
server.close()
|
||||||
|
|
Loading…
Reference in New Issue