3 UˆŠZ{ ã@s¶ddlZddlZddlZGdd„dƒZdd„Zedkr²ddlZejejejƒZ e j d ƒe j ƒZ ee ƒZ ejejejƒZej d ƒej ƒZ e je gggdeƒe jƒZeeeƒƒdS) éNc@s6eZdZdd„Zdd„Zd dd„Zdd „Zd d „Zd S)ÚNonBlockingFilecCs@||_tj|jjƒtjtjƒg|_g|_g|_d|_ d|_ dS)N) ÚfdÚfcntlÚfilenoÚF_SETFLÚosÚO_NDELAYÚ read_fd_setÚ write_fd_setÚ exc_fd_setÚ user_dataÚcallback)Úselfr©rú!/usr/lib/python3.6/nonblocking.pyÚ__init__ szNonBlockingFile.__init__cCsH||_x$|jD]}tj|jƒtjtjƒqW||_||_||_||_ dS)N) r rrrrrr r r r )rr r r r r ÚfrrrÚ set_callbacks zNonBlockingFile.set_callbackrcCs¨x’d}|j|jg}|j}|j}td|ƒtj|||ƒ\}}}td|||ƒ|j|krfd}|j|jƒ|jrŠ|sx|sx|rŠ|j||||jƒ|rPqWtdƒ|jj |ƒS)NrzCalling selectzSelect returnedéZ Returning) r rr r ÚprintÚselectÚremover r Úread)rZamtZstatus_changedZreadfdsZwritefdsZexcfdsrrrr!s"   zNonBlockingFile.readcCs |jj|ƒS)N)rÚwrite)rÚdatarrrr7szNonBlockingFile.writecCs t|j|ƒS)N)Úgetattrr)rÚnamerrrÚ __getattr__:szNonBlockingFile.__getattr__N)r)Ú__name__Ú __module__Ú __qualname__rrrrrrrrrr s   rcCs"td|||ƒt|djƒƒdS)NzCallback calledr)rr)ÚrÚwÚer rrrr =sr Ú__main__Ú localhosté³é´)r%r&)r%r')rrrrr rZsocketZAF_INETZ SOCK_STREAMÚsZconnectÚmakefilerZssÚs2rrZxxrÚlenrrrrÚs 4