SILENT KILLERPanel

Current Path: > > opt > alt > python35 > lib64 > python3.5 > >


Operation   : Linux premium131.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64
Software     : Apache
Server IP    : 162.0.232.56 | Your IP: 216.73.216.111
Domains      : 1034 Domain(s)
Permission   : [ 0755 ]

Files and Folders in: //opt/alt/python35/lib64/python3.5//

NameTypeSizeLast ModifiedActions
__pycache__ Directory - -
asyncio Directory - -
collections Directory - -
concurrent Directory - -
config-3.5m Directory - -
ctypes Directory - -
curses Directory - -
dbm Directory - -
distutils Directory - -
email Directory - -
encodings Directory - -
ensurepip Directory - -
html Directory - -
http Directory - -
idlelib Directory - -
importlib Directory - -
json Directory - -
lib-dynload Directory - -
lib2to3 Directory - -
logging Directory - -
multiprocessing Directory - -
plat-linux Directory - -
pydoc_data Directory - -
site-packages Directory - -
sqlite3 Directory - -
test Directory - -
unittest Directory - -
urllib Directory - -
venv Directory - -
wsgiref Directory - -
xml Directory - -
xmlrpc Directory - -
__future__.py File 4841 bytes May 31 2024 13:51:46.
__phello__.foo.py File 64 bytes May 31 2024 13:51:44.
_bootlocale.py File 1301 bytes May 31 2024 13:51:40.
_collections_abc.py File 24794 bytes May 31 2024 13:51:40.
_compat_pickle.py File 8556 bytes May 31 2024 13:51:43.
_compression.py File 5340 bytes May 31 2024 13:51:41.
_dummy_thread.py File 5118 bytes May 31 2024 13:51:44.
_markupbase.py File 14598 bytes May 31 2024 13:51:40.
_osx_support.py File 19115 bytes May 31 2024 13:51:44.
_pydecimal.py File 228628 bytes May 31 2024 13:51:40.
_pyio.py File 87968 bytes May 31 2024 13:51:41.
_sitebuiltins.py File 3115 bytes May 31 2024 13:51:41.
_strptime.py File 22185 bytes May 31 2024 13:51:45.
_sysconfigdata.py File 26951 bytes May 31 2024 13:51:44.
_threading_local.py File 7410 bytes May 31 2024 13:51:40.
_weakrefset.py File 5705 bytes May 31 2024 13:51:40.
abc.py File 8628 bytes May 31 2024 13:51:40.
aifc.py File 31967 bytes May 31 2024 13:51:45.
antigravity.py File 476 bytes May 31 2024 13:51:40.
argparse.py File 90138 bytes May 31 2024 13:51:44.
ast.py File 12001 bytes May 31 2024 13:51:44.
asynchat.py File 11971 bytes May 31 2024 13:51:44.
asyncore.py File 20104 bytes May 31 2024 13:51:46.
base64.py File 20522 bytes May 31 2024 13:51:40.
bdb.py File 23354 bytes May 31 2024 13:51:43.
binhex.py File 13954 bytes May 31 2024 13:51:40.
bisect.py File 2595 bytes May 31 2024 13:51:40.
bz2.py File 12424 bytes May 31 2024 13:51:44.
cProfile.py File 5324 bytes May 31 2024 13:51:40.
calendar.py File 22998 bytes May 31 2024 13:51:44.
cgi.py File 36046 bytes May 31 2024 13:51:44.
cgitb.py File 12023 bytes May 31 2024 13:51:46.
chunk.py File 5425 bytes May 31 2024 13:51:41.
cmd.py File 14860 bytes May 31 2024 13:51:40.
code.py File 10118 bytes May 31 2024 13:51:40.
codecs.py File 36231 bytes May 31 2024 13:51:40.
codeop.py File 5994 bytes May 31 2024 13:51:40.
colorsys.py File 4064 bytes May 31 2024 13:51:40.
compileall.py File 11711 bytes May 31 2024 13:51:40.
configparser.py File 53452 bytes May 31 2024 13:51:40.
contextlib.py File 12451 bytes May 31 2024 13:51:40.
copy.py File 8946 bytes May 31 2024 13:51:40.
copyreg.py File 6833 bytes May 31 2024 13:51:44.
crypt.py File 1879 bytes May 31 2024 13:51:40.
csv.py File 16128 bytes May 31 2024 13:51:40.
datetime.py File 75899 bytes May 31 2024 13:51:46.
decimal.py File 320 bytes May 31 2024 13:51:44.
difflib.py File 84204 bytes May 31 2024 13:51:41.
dis.py File 17350 bytes May 31 2024 13:51:40.
doctest.py File 104036 bytes May 31 2024 13:51:40.
dummy_threading.py File 2815 bytes May 31 2024 13:51:40.
enum.py File 22226 bytes May 31 2024 13:51:40.
filecmp.py File 9830 bytes May 31 2024 13:51:40.
fileinput.py File 14259 bytes May 31 2024 13:51:41.
fnmatch.py File 3163 bytes May 31 2024 13:51:40.
formatter.py File 15143 bytes May 31 2024 13:51:40.
fractions.py File 24612 bytes May 31 2024 13:51:40.
ftplib.py File 34951 bytes May 31 2024 13:51:40.
functools.py File 28944 bytes May 31 2024 13:51:46.
genericpath.py File 4364 bytes May 31 2024 13:51:46.
getopt.py File 7489 bytes May 31 2024 13:51:44.
getpass.py File 5994 bytes May 31 2024 13:51:40.
gettext.py File 21530 bytes May 31 2024 13:51:44.
glob.py File 5072 bytes May 31 2024 13:51:40.
gzip.py File 20260 bytes May 31 2024 13:51:44.
hashlib.py File 7979 bytes May 31 2024 13:51:46.
heapq.py File 22929 bytes May 31 2024 13:51:40.
hmac.py File 5063 bytes May 31 2024 13:51:41.
imaplib.py File 52183 bytes May 31 2024 13:51:44.
imghdr.py File 3758 bytes May 31 2024 13:51:44.
imp.py File 10676 bytes May 31 2024 13:51:40.
inspect.py File 114199 bytes May 31 2024 13:51:43.
io.py File 3396 bytes May 31 2024 13:51:40.
ipaddress.py File 75733 bytes May 31 2024 13:51:44.
keyword.py File 2222 bytes May 31 2024 13:51:44.
linecache.py File 5312 bytes May 31 2024 13:51:40.
locale.py File 74713 bytes May 31 2024 13:51:44.
lzma.py File 12925 bytes May 31 2024 13:51:45.
macpath.py File 5907 bytes May 31 2024 13:51:40.
macurl2path.py File 2732 bytes May 31 2024 13:51:40.
mailbox.py File 78418 bytes May 31 2024 13:51:43.
mailcap.py File 8104 bytes May 31 2024 13:51:40.
mimetypes.py File 20847 bytes May 31 2024 13:51:44.
modulefinder.py File 23085 bytes May 31 2024 13:51:40.
netrc.py File 5748 bytes May 31 2024 13:51:41.
nntplib.py File 43078 bytes May 31 2024 13:51:40.
ntpath.py File 22793 bytes May 31 2024 13:51:40.
nturl2path.py File 2444 bytes May 31 2024 13:51:44.
numbers.py File 10243 bytes May 31 2024 13:51:45.
opcode.py File 5885 bytes May 31 2024 13:51:46.
operator.py File 10863 bytes May 31 2024 13:51:44.
optparse.py File 60344 bytes May 31 2024 13:51:44.
os.py File 37033 bytes May 31 2024 13:51:40.
pathlib.py File 47001 bytes May 31 2024 13:51:44.
pdb.py File 61149 bytes May 31 2024 13:51:40.
pickle.py File 56176 bytes May 31 2024 13:51:41.
pickletools.py File 91761 bytes May 31 2024 13:51:40.
pipes.py File 8916 bytes May 31 2024 13:51:44.
pkgutil.py File 21355 bytes May 31 2024 13:51:40.
platform.py File 46147 bytes May 31 2024 13:51:40.
plistlib.py File 31810 bytes May 31 2024 13:51:40.
poplib.py File 14717 bytes May 31 2024 13:51:40.
posixpath.py File 14911 bytes May 31 2024 13:51:40.
pprint.py File 20860 bytes May 31 2024 13:51:40.
profile.py File 22032 bytes May 31 2024 13:51:41.
pstats.py File 26564 bytes May 31 2024 13:51:40.
pty.py File 4763 bytes May 31 2024 13:51:40.
py_compile.py File 7181 bytes May 31 2024 13:51:44.
pyclbr.py File 13564 bytes May 31 2024 13:51:39.
pydoc.py File 103652 bytes May 31 2024 13:51:40.
queue.py File 8780 bytes May 31 2024 13:51:44.
quopri.py File 7265 bytes May 31 2024 13:51:44.
random.py File 26463 bytes May 31 2024 13:51:40.
re.py File 15501 bytes May 31 2024 13:51:40.
reprlib.py File 5336 bytes May 31 2024 13:51:40.
rlcompleter.py File 6307 bytes May 31 2024 13:51:46.
runpy.py File 11959 bytes May 31 2024 13:51:40.
sched.py File 6216 bytes May 31 2024 13:51:44.
selectors.py File 19438 bytes May 31 2024 13:51:40.
shelve.py File 8528 bytes May 31 2024 13:51:44.
shlex.py File 11448 bytes May 31 2024 13:51:46.
shutil.py File 40048 bytes May 31 2024 13:51:44.
signal.py File 2123 bytes May 31 2024 13:51:44.
site.py File 21509 bytes May 31 2024 13:51:43.
smtpd.py File 35373 bytes May 31 2024 13:51:40.
smtplib.py File 43635 bytes May 31 2024 13:51:40.
sndhdr.py File 6418 bytes May 31 2024 13:51:44.
socket.py File 27135 bytes May 31 2024 13:51:45.
socketserver.py File 24666 bytes May 31 2024 13:51:46.
sre_compile.py File 18410 bytes May 31 2024 13:51:40.
sre_constants.py File 6821 bytes May 31 2024 13:51:40.
sre_parse.py File 35117 bytes May 31 2024 13:51:40.
ssl.py File 42352 bytes May 31 2024 13:51:44.
stat.py File 5038 bytes May 31 2024 13:51:44.
statistics.py File 19533 bytes May 31 2024 13:51:40.
string.py File 11854 bytes May 31 2024 13:51:44.
stringprep.py File 12917 bytes May 31 2024 13:51:41.
struct.py File 257 bytes May 31 2024 13:51:40.
subprocess.py File 58912 bytes May 31 2024 13:51:40.
sunau.py File 18095 bytes May 31 2024 13:51:40.
symbol.py File 2106 bytes May 31 2024 13:51:40.
symtable.py File 7191 bytes May 31 2024 13:51:44.
sysconfig.py File 24462 bytes May 31 2024 13:51:44.
tabnanny.py File 11414 bytes May 31 2024 13:51:44.
tarfile.py File 93070 bytes May 31 2024 13:51:40.
telnetlib.py File 23016 bytes May 31 2024 13:51:40.
tempfile.py File 26636 bytes May 31 2024 13:51:40.
textwrap.py File 19558 bytes May 31 2024 13:51:40.
this.py File 1003 bytes May 31 2024 13:51:41.
threading.py File 49027 bytes May 31 2024 13:51:44.
timeit.py File 12403 bytes May 31 2024 13:51:40.
token.py File 3075 bytes May 31 2024 13:51:40.
tokenize.py File 27790 bytes May 31 2024 13:51:44.
trace.py File 31553 bytes May 31 2024 13:51:40.
traceback.py File 22175 bytes May 31 2024 13:51:44.
tracemalloc.py File 15641 bytes May 31 2024 13:51:44.
tty.py File 879 bytes May 31 2024 13:51:40.
types.py File 8799 bytes May 31 2024 13:51:40.
typing.py File 80135 bytes May 31 2024 13:51:44.
uu.py File 6766 bytes May 31 2024 13:51:40.
uuid.py File 23261 bytes May 31 2024 13:51:40.
warnings.py File 15850 bytes May 31 2024 13:51:40.
wave.py File 17682 bytes May 31 2024 13:51:40.
weakref.py File 20466 bytes May 31 2024 13:51:44.
webbrowser.py File 21828 bytes May 31 2024 13:51:44.
xdrlib.py File 5913 bytes May 31 2024 13:51:46.
zipapp.py File 7157 bytes May 31 2024 13:51:40.
zipfile.py File 73672 bytes May 31 2024 13:51:46.

Reading File: //opt/alt/python35/lib64/python3.5///socket.py

# Wrapper module for _socket, providing some additional facilities
# implemented in Python.

"""\
This module provides socket operations and some related functions.
On Unix, it supports IP (Internet Protocol) and Unix domain sockets.
On other systems, it only supports IP. Functions specific for a
socket are available as methods of the socket object.

Functions:

socket() -- create a new socket object
socketpair() -- create a pair of new socket objects [*]
fromfd() -- create a socket object from an open file descriptor [*]
fromshare() -- create a socket object from data received from socket.share() [*]
gethostname() -- return the current hostname
gethostbyname() -- map a hostname to its IP number
gethostbyaddr() -- map an IP number or hostname to DNS info
getservbyname() -- map a service name and a protocol name to a port number
getprotobyname() -- map a protocol name (e.g. 'tcp') to a number
ntohs(), ntohl() -- convert 16, 32 bit int from network to host byte order
htons(), htonl() -- convert 16, 32 bit int from host to network byte order
inet_aton() -- convert IP addr string (123.45.67.89) to 32-bit packed format
inet_ntoa() -- convert 32-bit packed format IP to string (123.45.67.89)
socket.getdefaulttimeout() -- get the default timeout value
socket.setdefaulttimeout() -- set the default timeout value
create_connection() -- connects to an address, with an optional timeout and
                       optional source address.

 [*] not available on all platforms!

Special objects:

SocketType -- type object for socket objects
error -- exception raised for I/O errors
has_ipv6 -- boolean value indicating if IPv6 is supported

IntEnum constants:

AF_INET, AF_UNIX -- socket domains (first argument to socket() call)
SOCK_STREAM, SOCK_DGRAM, SOCK_RAW -- socket types (second argument)

Integer constants:

Many other constants may be defined; these may be used in calls to
the setsockopt() and getsockopt() methods.
"""

import _socket
from _socket import *

import os, sys, io, selectors
from enum import IntEnum

try:
    import errno
except ImportError:
    errno = None
EBADF = getattr(errno, 'EBADF', 9)
EAGAIN = getattr(errno, 'EAGAIN', 11)
EWOULDBLOCK = getattr(errno, 'EWOULDBLOCK', 11)

__all__ = ["fromfd", "getfqdn", "create_connection",
        "AddressFamily", "SocketKind"]
__all__.extend(os._get_exports_list(_socket))

# Set up the socket.AF_* socket.SOCK_* constants as members of IntEnums for
# nicer string representations.
# Note that _socket only knows about the integer values. The public interface
# in this module understands the enums and translates them back from integers
# where needed (e.g. .family property of a socket object).

IntEnum._convert(
        'AddressFamily',
        __name__,
        lambda C: C.isupper() and C.startswith('AF_'))

IntEnum._convert(
        'SocketKind',
        __name__,
        lambda C: C.isupper() and C.startswith('SOCK_'))

_LOCALHOST    = '127.0.0.1'
_LOCALHOST_V6 = '::1'


def _intenum_converter(value, enum_klass):
    """Convert a numeric family value to an IntEnum member.

    If it's not a known member, return the numeric value itself.
    """
    try:
        return enum_klass(value)
    except ValueError:
        return value

_realsocket = socket

# WSA error codes
if sys.platform.lower().startswith("win"):
    errorTab = {}
    errorTab[10004] = "The operation was interrupted."
    errorTab[10009] = "A bad file handle was passed."
    errorTab[10013] = "Permission denied."
    errorTab[10014] = "A fault occurred on the network??" # WSAEFAULT
    errorTab[10022] = "An invalid operation was attempted."
    errorTab[10035] = "The socket operation would block"
    errorTab[10036] = "A blocking operation is already in progress."
    errorTab[10048] = "The network address is in use."
    errorTab[10054] = "The connection has been reset."
    errorTab[10058] = "The network has been shut down."
    errorTab[10060] = "The operation timed out."
    errorTab[10061] = "Connection refused."
    errorTab[10063] = "The name is too long."
    errorTab[10064] = "The host is down."
    errorTab[10065] = "The host is unreachable."
    __all__.append("errorTab")


class _GiveupOnSendfile(Exception): pass


class socket(_socket.socket):

    """A subclass of _socket.socket adding the makefile() method."""

    __slots__ = ["__weakref__", "_io_refs", "_closed"]

    def __init__(self, family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None):
        # For user code address family and type values are IntEnum members, but
        # for the underlying _socket.socket they're just integers. The
        # constructor of _socket.socket converts the given argument to an
        # integer automatically.
        _socket.socket.__init__(self, family, type, proto, fileno)
        self._io_refs = 0
        self._closed = False

    def __enter__(self):
        return self

    def __exit__(self, *args):
        if not self._closed:
            self.close()

    def __repr__(self):
        """Wrap __repr__() to reveal the real class name and socket
        address(es).
        """
        closed = getattr(self, '_closed', False)
        s = "<%s.%s%s fd=%i, family=%s, type=%s, proto=%i" \
            % (self.__class__.__module__,
               self.__class__.__qualname__,
               " [closed]" if closed else "",
               self.fileno(),
               self.family,
               self.type,
               self.proto)
        if not closed:
            try:
                laddr = self.getsockname()
                if laddr:
                    s += ", laddr=%s" % str(laddr)
            except error:
                pass
            try:
                raddr = self.getpeername()
                if raddr:
                    s += ", raddr=%s" % str(raddr)
            except error:
                pass
        s += '>'
        return s

    def __getstate__(self):
        raise TypeError("Cannot serialize socket object")

    def dup(self):
        """dup() -> socket object

        Duplicate the socket. Return a new socket object connected to the same
        system resource. The new socket is non-inheritable.
        """
        fd = dup(self.fileno())
        sock = self.__class__(self.family, self.type, self.proto, fileno=fd)
        sock.settimeout(self.gettimeout())
        return sock

    def accept(self):
        """accept() -> (socket object, address info)

        Wait for an incoming connection.  Return a new socket
        representing the connection, and the address of the client.
        For IP sockets, the address info is a pair (hostaddr, port).
        """
        fd, addr = self._accept()
        # If our type has the SOCK_NONBLOCK flag, we shouldn't pass it onto the
        # new socket. We do not currently allow passing SOCK_NONBLOCK to
        # accept4, so the returned socket is always blocking.
        type = self.type & ~globals().get("SOCK_NONBLOCK", 0)
        sock = socket(self.family, type, self.proto, fileno=fd)
        # Issue #7995: if no default timeout is set and the listening
        # socket had a (non-zero) timeout, force the new socket in blocking
        # mode to override platform-specific socket flags inheritance.
        if getdefaulttimeout() is None and self.gettimeout():
            sock.setblocking(True)
        return sock, addr

    def makefile(self, mode="r", buffering=None, *,
                 encoding=None, errors=None, newline=None):
        """makefile(...) -> an I/O stream connected to the socket

        The arguments are as for io.open() after the filename, except the only
        supported mode values are 'r' (default), 'w' and 'b'.
        """
        # XXX refactor to share code?
        if not set(mode) <= {"r", "w", "b"}:
            raise ValueError("invalid mode %r (only r, w, b allowed)" % (mode,))
        writing = "w" in mode
        reading = "r" in mode or not writing
        assert reading or writing
        binary = "b" in mode
        rawmode = ""
        if reading:
            rawmode += "r"
        if writing:
            rawmode += "w"
        raw = SocketIO(self, rawmode)
        self._io_refs += 1
        if buffering is None:
            buffering = -1
        if buffering < 0:
            buffering = io.DEFAULT_BUFFER_SIZE
        if buffering == 0:
            if not binary:
                raise ValueError("unbuffered streams must be binary")
            return raw
        if reading and writing:
            buffer = io.BufferedRWPair(raw, raw, buffering)
        elif reading:
            buffer = io.BufferedReader(raw, buffering)
        else:
            assert writing
            buffer = io.BufferedWriter(raw, buffering)
        if binary:
            return buffer
        text = io.TextIOWrapper(buffer, encoding, errors, newline)
        text.mode = mode
        return text

    if hasattr(os, 'sendfile'):

        def _sendfile_use_sendfile(self, file, offset=0, count=None):
            self._check_sendfile_params(file, offset, count)
            sockno = self.fileno()
            try:
                fileno = file.fileno()
            except (AttributeError, io.UnsupportedOperation) as err:
                raise _GiveupOnSendfile(err)  # not a regular file
            try:
                fsize = os.fstat(fileno).st_size
            except OSError as err:
                raise _GiveupOnSendfile(err)  # not a regular file
            if not fsize:
                return 0  # empty file
            blocksize = fsize if not count else count

            timeout = self.gettimeout()
            if timeout == 0:
                raise ValueError("non-blocking sockets are not supported")
            # poll/select have the advantage of not requiring any
            # extra file descriptor, contrarily to epoll/kqueue
            # (also, they require a single syscall).
            if hasattr(selectors, 'PollSelector'):
                selector = selectors.PollSelector()
            else:
                selector = selectors.SelectSelector()
            selector.register(sockno, selectors.EVENT_WRITE)

            total_sent = 0
            # localize variable access to minimize overhead
            selector_select = selector.select
            os_sendfile = os.sendfile
            try:
                while True:
                    if timeout and not selector_select(timeout):
                        raise _socket.timeout('timed out')
                    if count:
                        blocksize = count - total_sent
                        if blocksize <= 0:
                            break
                    try:
                        sent = os_sendfile(sockno, fileno, offset, blocksize)
                    except BlockingIOError:
                        if not timeout:
                            # Block until the socket is ready to send some
                            # data; avoids hogging CPU resources.
                            selector_select()
                        continue
                    except OSError as err:
                        if total_sent == 0:
                            # We can get here for different reasons, the main
                            # one being 'file' is not a regular mmap(2)-like
                            # file, in which case we'll fall back on using
                            # plain send().
                            raise _GiveupOnSendfile(err)
                        raise err from None
                    else:
                        if sent == 0:
                            break  # EOF
                        offset += sent
                        total_sent += sent
                return total_sent
            finally:
                if total_sent > 0 and hasattr(file, 'seek'):
                    file.seek(offset)
    else:
        def _sendfile_use_sendfile(self, file, offset=0, count=None):
            raise _GiveupOnSendfile(
                "os.sendfile() not available on this platform")

    def _sendfile_use_send(self, file, offset=0, count=None):
        self._check_sendfile_params(file, offset, count)
        if self.gettimeout() == 0:
            raise ValueError("non-blocking sockets are not supported")
        if offset:
            file.seek(offset)
        blocksize = min(count, 8192) if count else 8192
        total_sent = 0
        # localize variable access to minimize overhead
        file_read = file.read
        sock_send = self.send
        try:
            while True:
                if count:
                    blocksize = min(count - total_sent, blocksize)
                    if blocksize <= 0:
                        break
                data = memoryview(file_read(blocksize))
                if not data:
                    break  # EOF
                while True:
                    try:
                        sent = sock_send(data)
                    except BlockingIOError:
                        continue
                    else:
                        total_sent += sent
                        if sent < len(data):
                            data = data[sent:]
                        else:
                            break
            return total_sent
        finally:
            if total_sent > 0 and hasattr(file, 'seek'):
                file.seek(offset + total_sent)

    def _check_sendfile_params(self, file, offset, count):
        if 'b' not in getattr(file, 'mode', 'b'):
            raise ValueError("file should be opened in binary mode")
        if not self.type & SOCK_STREAM:
            raise ValueError("only SOCK_STREAM type sockets are supported")
        if count is not None:
            if not isinstance(count, int):
                raise TypeError(
                    "count must be a positive integer (got {!r})".format(count))
            if count <= 0:
                raise ValueError(
                    "count must be a positive integer (got {!r})".format(count))

    def sendfile(self, file, offset=0, count=None):
        """sendfile(file[, offset[, count]]) -> sent

        Send a file until EOF is reached by using high-performance
        os.sendfile() and return the total number of bytes which
        were sent.
        *file* must be a regular file object opened in binary mode.
        If os.sendfile() is not available (e.g. Windows) or file is
        not a regular file socket.send() will be used instead.
        *offset* tells from where to start reading the file.
        If specified, *count* is the total number of bytes to transmit
        as opposed to sending the file until EOF is reached.
        File position is updated on return or also in case of error in
        which case file.tell() can be used to figure out the number of
        bytes which were sent.
        The socket must be of SOCK_STREAM type.
        Non-blocking sockets are not supported.
        """
        try:
            return self._sendfile_use_sendfile(file, offset, count)
        except _GiveupOnSendfile:
            return self._sendfile_use_send(file, offset, count)

    def _decref_socketios(self):
        if self._io_refs > 0:
            self._io_refs -= 1
        if self._closed:
            self.close()

    def _real_close(self, _ss=_socket.socket):
        # This function should not reference any globals. See issue #808164.
        _ss.close(self)

    def close(self):
        # This function should not reference any globals. See issue #808164.
        self._closed = True
        if self._io_refs <= 0:
            self._real_close()

    def detach(self):
        """detach() -> file descriptor

        Close the socket object without closing the underlying file descriptor.
        The object cannot be used after this call, but the file descriptor
        can be reused for other purposes.  The file descriptor is returned.
        """
        self._closed = True
        return super().detach()

    @property
    def family(self):
        """Read-only access to the address family for this socket.
        """
        return _intenum_converter(super().family, AddressFamily)

    @property
    def type(self):
        """Read-only access to the socket type.
        """
        return _intenum_converter(super().type, SocketKind)

    if os.name == 'nt':
        def get_inheritable(self):
            return os.get_handle_inheritable(self.fileno())
        def set_inheritable(self, inheritable):
            os.set_handle_inheritable(self.fileno(), inheritable)
    else:
        def get_inheritable(self):
            return os.get_inheritable(self.fileno())
        def set_inheritable(self, inheritable):
            os.set_inheritable(self.fileno(), inheritable)
    get_inheritable.__doc__ = "Get the inheritable flag of the socket"
    set_inheritable.__doc__ = "Set the inheritable flag of the socket"

def fromfd(fd, family, type, proto=0):
    """ fromfd(fd, family, type[, proto]) -> socket object

    Create a socket object from a duplicate of the given file
    descriptor.  The remaining arguments are the same as for socket().
    """
    nfd = dup(fd)
    return socket(family, type, proto, nfd)

if hasattr(_socket.socket, "share"):
    def fromshare(info):
        """ fromshare(info) -> socket object

        Create a socket object from the bytes object returned by
        socket.share(pid).
        """
        return socket(0, 0, 0, info)
    __all__.append("fromshare")

if hasattr(_socket, "socketpair"):

    def socketpair(family=None, type=SOCK_STREAM, proto=0):
        """socketpair([family[, type[, proto]]]) -> (socket object, socket object)

        Create a pair of socket objects from the sockets returned by the platform
        socketpair() function.
        The arguments are the same as for socket() except the default family is
        AF_UNIX if defined on the platform; otherwise, the default is AF_INET.
        """
        if family is None:
            try:
                family = AF_UNIX
            except NameError:
                family = AF_INET
        a, b = _socket.socketpair(family, type, proto)
        a = socket(family, type, proto, a.detach())
        b = socket(family, type, proto, b.detach())
        return a, b

else:

    # Origin: https://gist.github.com/4325783, by Geert Jansen.  Public domain.
    def socketpair(family=AF_INET, type=SOCK_STREAM, proto=0):
        if family == AF_INET:
            host = _LOCALHOST
        elif family == AF_INET6:
            host = _LOCALHOST_V6
        else:
            raise ValueError("Only AF_INET and AF_INET6 socket address families "
                             "are supported")
        if type != SOCK_STREAM:
            raise ValueError("Only SOCK_STREAM socket type is supported")
        if proto != 0:
            raise ValueError("Only protocol zero is supported")

        # We create a connected TCP socket. Note the trick with
        # setblocking(False) that prevents us from having to create a thread.
        lsock = socket(family, type, proto)
        try:
            lsock.bind((host, 0))
            lsock.listen()
            # On IPv6, ignore flow_info and scope_id
            addr, port = lsock.getsockname()[:2]
            csock = socket(family, type, proto)
            try:
                csock.setblocking(False)
                try:
                    csock.connect((addr, port))
                except (BlockingIOError, InterruptedError):
                    pass
                csock.setblocking(True)
                ssock, _ = lsock.accept()
            except:
                csock.close()
                raise
        finally:
            lsock.close()
        return (ssock, csock)
    __all__.append("socketpair")

socketpair.__doc__ = """socketpair([family[, type[, proto]]]) -> (socket object, socket object)
Create a pair of socket objects from the sockets returned by the platform
socketpair() function.
The arguments are the same as for socket() except the default family is AF_UNIX
if defined on the platform; otherwise, the default is AF_INET.
"""

_blocking_errnos = { EAGAIN, EWOULDBLOCK }

class SocketIO(io.RawIOBase):

    """Raw I/O implementation for stream sockets.

    This class supports the makefile() method on sockets.  It provides
    the raw I/O interface on top of a socket object.
    """

    # One might wonder why not let FileIO do the job instead.  There are two
    # main reasons why FileIO is not adapted:
    # - it wouldn't work under Windows (where you can't used read() and
    #   write() on a socket handle)
    # - it wouldn't work with socket timeouts (FileIO would ignore the
    #   timeout and consider the socket non-blocking)

    # XXX More docs

    def __init__(self, sock, mode):
        if mode not in ("r", "w", "rw", "rb", "wb", "rwb"):
            raise ValueError("invalid mode: %r" % mode)
        io.RawIOBase.__init__(self)
        self._sock = sock
        if "b" not in mode:
            mode += "b"
        self._mode = mode
        self._reading = "r" in mode
        self._writing = "w" in mode
        self._timeout_occurred = False

    def readinto(self, b):
        """Read up to len(b) bytes into the writable buffer *b* and return
        the number of bytes read.  If the socket is non-blocking and no bytes
        are available, None is returned.

        If *b* is non-empty, a 0 return value indicates that the connection
        was shutdown at the other end.
        """
        self._checkClosed()
        self._checkReadable()
        if self._timeout_occurred:
            raise OSError("cannot read from timed out object")
        while True:
            try:
                return self._sock.recv_into(b)
            except timeout:
                self._timeout_occurred = True
                raise
            except error as e:
                if e.args[0] in _blocking_errnos:
                    return None
                raise

    def write(self, b):
        """Write the given bytes or bytearray object *b* to the socket
        and return the number of bytes written.  This can be less than
        len(b) if not all data could be written.  If the socket is
        non-blocking and no bytes could be written None is returned.
        """
        self._checkClosed()
        self._checkWritable()
        try:
            return self._sock.send(b)
        except error as e:
            # XXX what about EINTR?
            if e.args[0] in _blocking_errnos:
                return None
            raise

    def readable(self):
        """True if the SocketIO is open for reading.
        """
        if self.closed:
            raise ValueError("I/O operation on closed socket.")
        return self._reading

    def writable(self):
        """True if the SocketIO is open for writing.
        """
        if self.closed:
            raise ValueError("I/O operation on closed socket.")
        return self._writing

    def seekable(self):
        """True if the SocketIO is open for seeking.
        """
        if self.closed:
            raise ValueError("I/O operation on closed socket.")
        return super().seekable()

    def fileno(self):
        """Return the file descriptor of the underlying socket.
        """
        self._checkClosed()
        return self._sock.fileno()

    @property
    def name(self):
        if not self.closed:
            return self.fileno()
        else:
            return -1

    @property
    def mode(self):
        return self._mode

    def close(self):
        """Close the SocketIO object.  This doesn't close the underlying
        socket, except if all references to it have disappeared.
        """
        if self.closed:
            return
        io.RawIOBase.close(self)
        self._sock._decref_socketios()
        self._sock = None


def getfqdn(name=''):
    """Get fully qualified domain name from name.

    An empty argument is interpreted as meaning the local host.

    First the hostname returned by gethostbyaddr() is checked, then
    possibly existing aliases. In case no FQDN is available, hostname
    from gethostname() is returned.
    """
    name = name.strip()
    if not name or name == '0.0.0.0':
        name = gethostname()
    try:
        hostname, aliases, ipaddrs = gethostbyaddr(name)
    except error:
        pass
    else:
        aliases.insert(0, hostname)
        for name in aliases:
            if '.' in name:
                break
        else:
            name = hostname
    return name


_GLOBAL_DEFAULT_TIMEOUT = object()

def create_connection(address, timeout=_GLOBAL_DEFAULT_TIMEOUT,
                      source_address=None):
    """Connect to *address* and return the socket object.

    Convenience function.  Connect to *address* (a 2-tuple ``(host,
    port)``) and return the socket object.  Passing the optional
    *timeout* parameter will set the timeout on the socket instance
    before attempting to connect.  If no *timeout* is supplied, the
    global default timeout setting returned by :func:`getdefaulttimeout`
    is used.  If *source_address* is set it must be a tuple of (host, port)
    for the socket to bind as a source address before making the connection.
    A host of '' or port 0 tells the OS to use the default.
    """

    host, port = address
    err = None
    for res in getaddrinfo(host, port, 0, SOCK_STREAM):
        af, socktype, proto, canonname, sa = res
        sock = None
        try:
            sock = socket(af, socktype, proto)
            if timeout is not _GLOBAL_DEFAULT_TIMEOUT:
                sock.settimeout(timeout)
            if source_address:
                sock.bind(source_address)
            sock.connect(sa)
            return sock

        except error as _:
            err = _
            if sock is not None:
                sock.close()

    if err is not None:
        raise err
    else:
        raise error("getaddrinfo returns an empty list")

def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):
    """Resolve host and port into list of address info entries.

    Translate the host/port argument into a sequence of 5-tuples that contain
    all the necessary arguments for creating a socket connected to that service.
    host is a domain name, a string representation of an IPv4/v6 address or
    None. port is a string service name such as 'http', a numeric port number or
    None. By passing None as the value of host and port, you can pass NULL to
    the underlying C API.

    The family, type and proto arguments can be optionally specified in order to
    narrow the list of addresses returned. Passing zero as a value for each of
    these arguments selects the full range of results.
    """
    # We override this function since we want to translate the numeric family
    # and socket type values to enum constants.
    addrlist = []
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
        af, socktype, proto, canonname, sa = res
        addrlist.append((_intenum_converter(af, AddressFamily),
                         _intenum_converter(socktype, SocketKind),
                         proto, canonname, sa))
    return addrlist

SILENT KILLER Tool