File: //opt/saltstack/salt/lib/python3.10/site-packages/__pycache__/portend.cpython-310.pyc
o
;jX � @ s� d Z ddlZddlZddlZddlZddlZddlZddlZddlm Z ddl
Zddlm
Z
dd� ZG dd� de�ZG d d
� d
e�ZG dd� de�Zed
�fdd�Zed
�fdd�Zdd� ZG dd� de�Zddd�Zedkote� dS dS )z:
A simple library for managing the availability of ports.
� N)�abc)�timingc C s | dkrdS | dv rdS | S )z�
Return the host on which a client can connect to the given listener.
>>> client_host('192.168.0.1')
'192.168.0.1'
>>> client_host('0.0.0.0')
'127.0.0.1'
>>> client_host('::')
'::1'
z0.0.0.0z 127.0.0.1)z::z::0z ::0.0.0.0z::1� )Zserver_hostr r �;/opt/saltstack/salt/lib/python3.10/site-packages/portend.py�client_host s
r c @ s( e Zd Zd dd�Zd
dd�Zdd� ZdS )�Checker� �?c C s
|| _ d S �N��timeout)�selfr r r r �__init__) �
zChecker.__init__Nc C sb |du rt |tj�r|dd� \}}t�� dkrt|�}t�||tjtj �}t
t�| j
|�� dS )a�
Assert that the given addr is free
in that all attempts to connect fail within the timeout
or raise a PortNotFree exception.
>>> free_port = find_available_local_port()
>>> Checker().assert_free('localhost', free_port)
>>> Checker().assert_free('127.0.0.1', free_port)
>>> Checker().assert_free('::1', free_port)
Also accepts an addr tuple
>>> addr = '::1', free_port, 0, 0
>>> Checker().assert_free(addr)
Host might refer to a server bind address like '::', which
should use localhost to perform the check.
>>> Checker().assert_free('::', free_port)
N� �Windows)�
isinstancer �Sequence�platform�systemr �socket�getaddrinfo� AF_UNSPEC�SOCK_STREAM�list� itertools�starmap�_connect)r �host�port�infor r r �assert_free, s zChecker.assert_freec
C s� t � |||�}|�| j� t�|��! z|�|� W n t jy+ Y W d � d S w W d � n1 s6w Y |d d� \}}d} t| jdi t � ����)Nr z Port {port} is in use on {host}.r )
r �
settimeoutr �
contextlib�closing�connect�error�PortNotFree�format�locals)
r �af�socktype�proto� canonname�sa�sr r Ztmplr r r r I s ���zChecker._connect)r r )�__name__�
__module__�__qualname__r
r r r r r r r ( s
r c @ � e Zd ZdS )�TimeoutN�r/ r0 r1 r r r r r3 Z � r3 c @ r2 )r&