Ok i am fighting for 2 days with this, first i tough i broken some code but 
from what i see i did not, i tested created relatively minimal example, so when 
i run it on my pc it works no problem but when run on arm64 raspbery pi4 thats 
proxypassed to by nginx it crashes, posting code and error
    
    
    #SO IT SHOUD ERROR BUT IN EXEPCTION AND APP SHOULD
    #NOT TOTALY CLOSE LIKE WHEN RUN ON DESKTOP
    
    {.experimental: "codeReordering".}
    import asynchttpserver, asyncdispatch
    import ws, os
    
    
    type Player = ref object of RootObj
        id*:int
        conn*:WebSocket
    
    var players:seq[Player] = @[]
    players.add( Player( id:1, conn:nil ) )
    players.add( Player( id:2, conn:nil ) )
    
    
    var server = newAsyncHttpServer()
    proc cb(req: Request) {.async, gcsafe.} =
      if req.url.path == "/ws":
        var ws = await newWebSocket(req)
        await ws.send("Welcome to simple echo server")
        if players[0].conn == nil:
          players[0].conn = ws
        elif players[1].conn == nil:
          players[1].conn = ws
        
        while ws.readyState == Open:
          try:
            let packet = await ws.receiveStrPacket()
            await ws.send(packet)
          except:
            echo "incoming stream error"
      else:
        await req.respond(Http404, "Not found")
    
    var num = 0;
    proc spamMsg(){.async.}=
        while true:
          await sleepAsync(1000)
          num = num + 1;
          echo "sending fart " & $num
          for p in players:
            if p.conn != nil and p.conn.readyState == Open:
              try:
                await p.conn.send(" Fart " & $num)
              except:
                echo "error on send"
    
    proc forceClose(){.async.}=
        await sleepAsync(10000)
        echo "Closing"
        for p in players:
          if p.conn != nil and p.conn.readyState == Open:
            try:
              p.conn.close()
              #p.conn = nil
            except:
              echo "error on close"
    
    
    echo "starting"
    asyncCheck spamMsg()
    asyncCheck forceClose()
    waitFor server.serve(Port(9011), cb)
    
    
    Run
    
    
    ERROR PART
    starting
    sending fart 1
    sending fart 2
    sending fart 3
    sending fart 4
    sending fart 5
    sending fart 6
    sending fart 7
    sending fart 8
    sending fart 9
    Closing
    incoming stream error
    incoming stream error
    /home/me/Documents/Projects/grammergame/src/minimal.nim(63) minimal
    /home/me/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncdispatch.nim(1892) 
waitFor
    /home/me/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncdispatch.nim(1582) 
poll
    /home/me/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncdispatch.nim(1346) 
runOnce
    /home/me/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncdispatch.nim(210) 
processPendingCallbacks
    /home/me/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncmacro.nim(34) 
processRequestNimAsyncContinue
    /home/me/.choosenim/toolchains/nim-1.2.6/lib/pure/asynchttpserver.nim(279) 
processRequestIter
    /home/me/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncnet.nim(695) close
    /home/me/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncdispatch.nim(1276) 
closeSocket
    [[reraised from:
    /home/me/Documents/Projects/grammergame/src/minimal.nim(63) minimal
    /home/me/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncdispatch.nim(1892) 
waitFor
    /home/me/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncdispatch.nim(1582) 
poll
    /home/me/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncdispatch.nim(1346) 
runOnce
    /home/me/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncdispatch.nim(210) 
processPendingCallbacks
    /home/me/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncmacro.nim(34) 
processClientNimAsyncContinue
    /home/me/.choosenim/toolchains/nim-1.2.6/lib/pure/asynchttpserver.nim(292) 
processClientIter
    /home/me/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(383) read
    ]]
    [[reraised from:
    /home/me/Documents/Projects/grammergame/src/minimal.nim(63) minimal
    /home/me/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncdispatch.nim(1892) 
waitFor
    /home/me/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncdispatch.nim(1582) 
poll
    /home/me/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncdispatch.nim(1346) 
runOnce
    /home/me/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncdispatch.nim(210) 
processPendingCallbacks
    /home/me/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(431) 
asyncCheckCallback
    ]]
    Error: unhandled exception: File descriptor not registered.
    Async traceback:
      /home/me/Documents/Projects/grammergame/src/minimal.nim(63)               
 minimal
      /home/me/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncdispatch.nim(1892) 
 waitFor
      /home/me/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncdispatch.nim(1582) 
 poll
      /home/me/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncdispatch.nim(1346) 
 runOnce
      /home/me/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncdispatch.nim(210)  
 processPendingCallbacks
      /home/me/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncmacro.nim(34)      
 processRequestNimAsyncContinue
      
/home/me/.choosenim/toolchains/nim-1.2.6/lib/pure/asynchttpserver.nim(279) 
processRequestIter
      /home/me/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncnet.nim(695)       
 close
      /home/me/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncdispatch.nim(1276) 
 closeSocket
      #[
        /home/me/Documents/Projects/grammergame/src/minimal.nim(63)             
   minimal
        
/home/me/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncdispatch.nim(1892)  
waitFor
        
/home/me/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncdispatch.nim(1582)  poll
        
/home/me/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncdispatch.nim(1346)  
runOnce
        
/home/me/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncdispatch.nim(210)   
processPendingCallbacks
        /home/me/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncmacro.nim(34)    
   processClientNimAsyncContinue
        
/home/me/.choosenim/toolchains/nim-1.2.6/lib/pure/asynchttpserver.nim(292) 
processClientIter
        /home/me/.choosenim/toolchains/nim-1.2.6/lib/pure/asyncfutures.nim(383) 
   read
      ]#
    Exception message: File descriptor not registered.
    Exception type: [ValueError]
    
    
    Run

atm will try to test without nginx tough dont think its related to that but 
better sure then sorry :)

Reply via email to