def server.loop.got

emerging-ezhttp@0.21.0.0 · src/server.bend:382

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

382# what an accept brought, for the loop: `took` serves a connection and goes
383# on with one connection fewer, `idle` accepts again, `missed` logs, pauses
384# and goes on with one fewer (a failed accept counts toward the limit)
385def server.loop.got(~C: Data, ~handle: C -> Req -> IO(Answer), +ctx: C,
386  +slots: Chan(Unit), +limited: Bool, +done: Chan(Unit), +tracked: Bool,
387  r: Listener & Step.Accept<Socket>, took: Listener -> IO(Unit),
388  idle: Listener -> IO(Unit), missed: Listener -> IO(Unit)) -> IO(Unit):
389  (lst, got) = r
390  match got:
391    case Step.Took{sock}:
392      IO.bind(Unit, Unit,
393        server.fork(~C, handle, ctx, sock, slots, limited, done, tracked),
394        _u => took(lst))
395    case Step.Idle{}:
396      idle(lst)
397    case Step.Missed{line}:
398      IO.bind(Unit, Unit, IO.print_err(line), _u =>
399        IO.bind(Unit, Unit, IO.sleep(server.pause()), _v => missed(lst)))

Uses (16)

Used by (2)