sequenceDiagram

participant ServerBuilder
participant mio
participant Accept
participant WorkerClient


ServerBuilder->>Accept: start(socks, workers)
loop Continuous: poll
	Accept->>mio: mio::Poll::poll()
	alt poll() -> TIMER | CMD
		Accept-->>Accept: process_*
	else poll() -> NOTIFY
		Accept->>Accept: backpressure
	else poll() -> OTHER(token)
		Accept-->>Accept: accept_one(Conn)
		loop while exist WorkerClient
			Accept->>WorkerClient: send(Conn)
			alt send(Conn) -> Ok(_)
				Note over Accept: break loop
			else send(Conn) -> Err(_)
				Accept->>ServerBuilder: worker_faulted(idx)
				Accept->>Accept: remove worker, get next worker				
			end
		end
	end
end