def server.loop.go
emerging-ezhttp@0.21.0.0 · src/server.bend:401
import emerging-ezhttp@0.21.0.0/src/server.bend as Server
import Base
import emerging-ezhttp@0.21.0.0/src/step.bend as Step
401
402
403def server.loop.go(~C: Data, ~handle: C -> Req -> IO(Answer), +ctx: C,
404 fuel: Nat, idles: Nat, +forks: Nat, +slots: Chan(Unit), +limited: Bool,
405 +done: Chan(Unit), listener: Listener) -> IO(Unit):
406 match fuel idles:
407 case 0n _:
408 IO.bind(Unit, Unit, Listener.close(listener), _u => server.join(forks, done))
409 case 1n+_f 0n:
410 IO.bind(Unit, Unit, Listener.close(listener), _u => server.join(forks, done))
411 case 1n+f0 1n+i:
412 +f = f0
413 IO.bind(Listener & Step.Accept<Socket>, Unit, server.accept(listener),
414 r => server.loop.got(~C, handle, ctx, slots, limited, done, True{}, r,
415 l => server.loop.go(~C, handle, ctx, f, server.idles(), 1n+forks, slots,
416 limited, done, l),
417 l => server.loop.go(~C, handle, ctx, 1n+f, i, forks, slots, limited,
418 done, l),
419 l => server.loop.go(~C, handle, ctx, f, server.idles(), forks, slots,
420 limited, done, l)))