[nim-dev] Re: Polling for socket clients

  • From: ephja <ephja@xxxxxxxxxx>
  • To: nim-dev@xxxxxxxxxxxxx
  • Date: Sun, 1 Nov 2015 15:34:16 +0000

. code-block:: nim

import asyncnet, asyncdispatch

var clients {.threadvar.}: seq[AsyncSocket]

proc processClient(client: AsyncSocket) =
echo "DEBUG: process client"
# stuff ..

proc acceptClient(server: AsyncSocket) {.async.} =
let clientFut = server.accept()
await sleepAsync(100) or clientFut
if clientFut.finished:
echo "DEBUG: client accepted"
clients.add clientFut.read

proc processClients(server: AsyncSocket) =
for client in clients:
processClient(client)

proc main =
clients = @[]
var server = newAsyncSocket()
server.bindAddr(12345.Port)
server.listen()

while true:
waitFor acceptClient(server)
processClients(server)

main()
while true:
poll(timeout = 1)

Other related posts: