�
Ϫ�f�S � �� � d Z ddlZddlZddlmZ ddlmZmZ ddlm Z m
Z
mZ ddlm
Z
ddlmZmZmZmZmZmZmZmZmZmZ ddlmZmZ dd lmZmZ dd
lm Z m!Z! ddl"m#Z#m$Z$m%Z%m&Z&m'Z' e jP d
� Z) e jP d� Z* ddl+m,Z- e-Z, ddlm/Z0 e0Z/e!dk( Z1dZ2e1r
ddlm3Z3m4Z4 dZ2 e jj � r ddl6Z6dZ2 G d� d� Z7 eeee� G d� de7e
� � Z8 G d� d� Z9 ee� G d� de9e7� � Z:e,�e/� ee8e� e1r
ee8ee� e2r ee8e� e;edd� � ee8e� dgZ<y# e.$ r dZ,Y ��w xY w# e.$ r dZ/Y ��w xY w# e.$ r dZ6Y ��w xY w)z
Posix reactor base class
� N)�Sequence)�classImplements�implementer)�error�tcp�udp)�ReactorBase)
�IHalfCloseableDescriptor�
IReactorFDSet�IReactorMulticast�IReactorProcess�IReactorSocket�IReactorSSL�IReactorTCP�IReactorUDP�IReactorUNIX�IReactorUNIXDatagram)�CONNECTION_DONE�CONNECTION_LOST)�failure�log)�platform�platformType� )�SignalHandling�_ChildSignalHandling�_IWaker�_MultiSignalHandling�_WakerzHandler has no fileno methodzFile descriptor lost)�tls)�ssl�posixF)�process�unixTc �� � e Zd ZdZej
ej ej
� � ej ej ej � � ifd�Z y)�_DisconnectSelectableMixinz>
Mixin providing the C{_disconnectSelectable} method.
c � � | j |� |j |j � }|ri|rD|j t j k( r't j |� r|j |� y| j |� |j |� y| j |� |j t j |� � y)z�
Utility function for disconnecting a selectable.
Supports half-close notification, isRead should be boolean indicating
whether error resulted from doRead().
N)�removeReader�get� __class__r �ConnectionDoner
�
providedBy�readConnectionLost�removeWriter�connectionLostr �Failure)�self�
selectable�why�isRead�faildict�fs �</usr/lib/python3/dist-packages/twisted/internet/posixbase.py�_disconnectSelectablez0_DisconnectSelectableMixin._disconnectSelectableS s� � �
���*�%��L�L����'�����M�M�U�%9�%9�9�,�7�7�
�C��-�-�a�0��!�!�*�-��)�)�!�,����j�)��%�%�g�o�o�c�&:�;� N)
�__name__�
__module__�__qualname__�__doc__r r+ r r0 �ConnectionLostr8 � r9 r7 r& |