← Back
Editing: tcp.cpython-38.pyc
U ��W[|� � @ s0 d Z ddlmZmZ ddlZddlZddlZddlZddlZddl Z ddl mZmZ ddl mZ ddlmZmZ ddlmZ ddlmZmZ zdd lmZmZmZ W nD ek r� G d d� de�ZG dd � d e�ZG dd� de�ZY nX edk�rxe� Z ddl!m"Z# ddl!m$Z% ddl!m&Z' ddl!m(Z) ddl!m*Z+ ddl!m,Z- ddl!m.Z/ e� Z0e� Z1e%Z2ddl!m3Z4 ddl5m6Z7 n�ddl!m Z ddl!m#Z# ddl!m%Z% ddl!m'Z' ddl!m)Z) ddl!m+Z+ dd l!m-Z- dd!l!m/Z/ dd"l!m0Z0 dd#l!m1Z1 dd$l!m2Z2 dd%l!m4Z4 dd&lm7Z7 dd'l!m8Z8 dd(l9m:Z:m;Z;m<Z< dd)l=m>Z> dd*lm?Z?m@Z@mAZA dd+lBmCZC dd,lDmEZE dd-l9mFZFmGZGmHZHmIZI dd.lJmKZK eLed/d�ZMeNefZOd0d1� ZPd2d3� ZQd4d5� ZRG d6d7� d7e�ZSG d8d9� d9e�ZTeeHjUeHjV�G d:d;� d;eeFjWeSeT��ZXG d<d=� d=e�ZYG d>d?� d?eYeeX�ZZej[eMB Z\d@dA� Z]G dBdC� dCe�Z^G dDdE� dEe^eZ�Z_G dFdG� dGeeX�Z`G dHdI� dIe�Zaeea�e jbG dJdK� dKe���Zceea�G dLdM� dMe��Zdedk�r�ed� ZenecdNdO� �Zee/e-e0e1e4fZfe jbG dPdQ� dQe��ZgdRdS� ZheeHji�G dTdU� dUe:jjeS��ZkG dVdW� dWe:jl�ZmdS )Xzt Various asynchronous TCP/IP classes. End users shouldn't use this module directly - use the reactor APIs instead. � )�division�absolute_importN)� Interface�implementer)�Logger)� lazyByteSlice�unicode)�platformType)�versions� deprecate)�ConnectionMixin�ClientMixin�ServerMixinc @ s e Zd ZdZdS )�_TLSConnectionMixinFN)�__name__� __module__�__qualname__ZTLS� r r �6/usr/lib/python3/dist-packages/twisted/internet/tcp.pyr % s r c @ s e Zd ZdS )�_TLSClientMixinN�r r r r r r r r ) s r c @ s e Zd ZdS )�_TLSServerMixinNr r r r r r - s r �win32)� WSAEINVAL)�WSAEWOULDBLOCK)�WSAEINPROGRESS)�WSAEALREADY)� WSAEISCONN)� WSAENOBUFS)� WSAEMFILE)� WSAECONNRESET)�formatError)�EPERM)�EINVAL)�EWOULDBLOCK)�EINPROGRESS)�EALREADY)�EISCONN)�ENOBUFS)�EMFILE)�ENFILE)�ENOMEM)�EAGAIN)�ECONNABORTED)�strerror)� errorcode)�base�address�fdesc)� deferLater)�log�failure�reflect)�untilConcludes)�CannotListenError)�abstract�main� interfaces�error)�ProtocolZAI_NUMERICSERVc C sN t | �dkr>t�| tjtjB �d }t|gt| dd� � �S | dd� S dS )ai Return a 2-tuple of socket IP and port for IPv4 and a 4-tuple of socket IP, port, flowInfo, and scopeID for IPv6. For IPv6, it returns the interface portion (the part after the %) as a part of the IPv6 address, which Python 3.7+ does not include. @param addr: A 2-tuple for IPv4 information or a 4-tuple for IPv6 information. � r � N� )�len�socket�getnameinfo�NI_NUMERICHOST�NI_NUMERICSERV�tuple�list)�addr�hostr r r �_getrealnameg s ��rJ c C s t | �� �S �z See L{_getrealname}. )rJ Zgetpeername��sktr r r �_getpeername{ s rN c C s t | �� �S rK )rJ �getsocknamerL r r r �_getsockname� s rP c @ s e Zd ZdZdZdd� ZdS )� _SocketCloserz� @ivar _shouldShutdown: Set to C{True} if C{shutdown} should be called before calling C{close} on the underlying socket. @type _shouldShutdown: C{bool} Tc C s~ | j }z8|r| jr<|�d� n| j �t jt jt�ddd�� W n t jk rT Y nX z|� � W n t jk rx Y nX d S )Nr@ Ziir? r ) rB �_shouldShutdown�shutdown� setsockopt� SOL_SOCKETZ SO_LINGER�structZpackr<