YfN@s_dZdgZddlZddlZddlmZddlmZddlmZddlmZdd lm Z dd lm Z dd l m Z Gd d d e j e jZGdddee jZGdddee jZGdddeZGdddeee jZGdddeee jZGdddejZdS)zEvent loop using a proactor and related classes. A proactor is a "notify-on-completion" multiplexer. Currently a proactor is only implemented on Windows with IOCP. BaseProactorEventLoopN) base_events)compat) constants)futures)sslproto) transports)loggercseZdZdZdddfddZddZddZd d Zd d Zd dZ ddZ e j rddZ dddZddZddZddZS)_ProactorBasePipeTransportz*Base class for pipe and socket transports.Ncstj|||j|||_||_||_d|_d|_d|_d|_ d|_ d|_ d|_ |jdk r|jj |jj|jj||dk r|jjtj|ddS)NrF)super__init__ _set_extra_sock _protocol_server_buffer _read_fut _write_fut_pending_write _conn_lost_closing _eof_writtenZ_attach_loop call_soonZconnection_maderZ_set_result_unless_cancelled)selfloopsockprotocolwaiterextraserver) __class__ ) r"__name__rappendrfilenorrrlenrjoin)rinfobufsizer#r#r$__repr__/s"     z#_ProactorBasePipeTransport.__repr__cCs||jdr) rVrWrXrrr\ ExceptionrBrr]r)rrorDr#r#r$rs    z(BaseProactorEventLoop._loop_self_readingcCs|jjddS)Ns)rrm)rr#r#r$_write_to_selfsz$BaseProactorEventLoop._write_to_selfdcs5dfddjdS)Ncsy|dk r|j\}}jr@tjd||}dk rj||dddd|idn"j||dd|idjrdSjj}Wnt k rL}zbj dkrj dd d |d ij njr:tjd d dWYdd}~Xn?t jk rjj Yn!X|jj <|jdS)Nz#%r got a new connection from %r: %rrTr r|r!rr=zAccept failed on a socketr>rHzAccept failed on socket %rr<)rVZ_debugr rArrrrWrr[r*rBr7rr\rr])roZconnZaddrrrD)rprotocol_factoryrr!rrr#r$rs>            z2BaseProactorEventLoop._start_serving..loop)r)rrrrr!Zbacklogr#)rrrr!rrr$_start_servings$$z$BaseProactorEventLoop._start_servingcCsdS)Nr#)rZ event_listr#r#r$_process_eventssz%BaseProactorEventLoop._process_eventscCs5x!|jjD]}|jqW|jjdS)N)rvaluesr6clear)rZfuturer#r#r$rsz*BaseProactorEventLoop._stop_accept_futurescCs(|j|jj||jdS)N)rrW _stop_servingr7)rrr#r#r$r#s z#BaseProactorEventLoop._stop_serving)r(rKrLr rrrrrr7rrrrrrrrrrrrrr#r#)r"r$r{s4           (  )rM__all__rHr8rrrrrr logr Z_FlowControlMixinZ BaseTransportr Z ReadTransportrNZWriteTransportr`rsZ Transportryr{Z BaseEventLooprr#r#r#r$s0     M T