Python xử lý lỗi hết thời gian kết nối như thế nào?

def request[self, url, method, data=None, headers=None]. url = verify[url] try. if method == 'get'. r = self. session. get[url, timeout=self. timeout, headers=headers, verify=False, allow_redirects=True] return r else. r = self. session. post[url, data=data, timeout=self. timeout, headers=headers, verify=False, allow_redirects=False] return r except [requests. exceptions. ConnectTimeout, requests. exceptions. ReadTimeout, requests. exceptions. Timeout, requests. exceptions. SSLError, requests. exceptions. ConnectionError, ssl. SSLError, AttributeError, ConnectionRefusedError, socket. timeout, urllib3. exceptions. ReadTimeoutError, OpenSSL. SSL. WantReadError, urllib3. exceptions. DecodeError, requests. exceptions. ContentDecodingError]. pass except Exception as e. logging. exception[e]
> Isn't it a job of crossplatform programming language to abstract from
> low-level platform details?

It's certainly not Python's job. It's an explicit design goal, and a
long tradition, to expose system interfaces *as is*, with the very
same parameters, and the very same error codes. This is useful for
developers who need to understand what problem they encounter - they
can trust that Python doesn't second-guess the operating system.

It might be useful to put a layer on top of the system interfaces,
but such a layer needs to use different names.

> The scope of this bug is not about handling all possible Winsock errors.
> It is about proper handling the sole timeout error from the list
> //www.winsock-error.com/ to make socket.connect[] interface
> consistent for both windows and linux.

That's nearly impossible, with respect to specific error conditions.
The TCP stacks are too different.

You can easily define an common [but useless] error handling scheme
yourself: catch Exception, and interpret it as "it didn't work".

> BTW, I have tested the behaviour on linux - the system timeout on socket
> does occur, but with different error code.
> 
> socket.error: [110, 'Connection timed out']
> 
> Note that the error message is different too. That means that to
> properly wait for service to appear [or retry to reconnect later if
> server is not available] you need to handle three error cases.

That's correct. However, you shouldn't look at the error message when
handling the error on Linux. Instead, you should check whether the
error code is errno.ETIMEDOUT. The error message is only meant for
a human reader. Also notice that possible other errors returned from
connect are EACCES, EPERM, EADDRINUSE, EAFNOSUPPORT, EAGAIN,
EALREADY, EBADF, ECONNREFUSED, EFAULT, EINPROGRESS, EINTR, EISCONN,
ENETUNREACH, ENOTSOCK.

This module provides access to the BSD socket interface. It is available on all modern Unix systems, Windows, MacOS, and probably additional platforms

Note

Some behavior may be platform dependent, since calls are made to the operating system socket APIs

Availability . not Emscripten, not WASI.

This module does not work or is not available on WebAssembly platforms

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
6 and
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
7. See WebAssembly platforms for more information.

The Python interface is a straightforward transliteration of the Unix system call and library interface for sockets to Python’s object-oriented style. the

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
8 function returns a socket object whose methods implement the various socket system calls. Parameter types are somewhat higher-level than in the C interface. as with
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
9 and
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
0 operations on Python files, buffer allocation on receive operations is automatic, and buffer length is implicit on send operations

See also

Module
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
1

Classes that simplify writing network servers

Module
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
2

A TLS/SSL wrapper for socket objects

Socket families¶

Depending on the system and the build options, various socket families are supported by this module

The address format required by a particular socket object is automatically selected based on the address family specified when the socket object was created. Socket addresses are represented as follows

  • The address of an

    >>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
    [[socket.AF_INET6, socket.SOCK_STREAM,
     6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
     [socket.AF_INET, socket.SOCK_STREAM,
     6, '', ['93.184.216.34', 80]]]
    
    3 socket bound to a file system node is represented as a string, using the file system encoding and the
    >>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
    [[socket.AF_INET6, socket.SOCK_STREAM,
     6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
     [socket.AF_INET, socket.SOCK_STREAM,
     6, '', ['93.184.216.34', 80]]]
    
    4 error handler [see PEP 383]. An address in Linux’s abstract namespace is returned as a bytes-like object with an initial null byte; note that sockets in this namespace can communicate with normal file system sockets, so programs intended to run on Linux may need to deal with both types of address. A string or bytes-like object can be used for either type of address when passing it as an argument.

    Changed in version 3. 3. Previously,

    >>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
    [[socket.AF_INET6, socket.SOCK_STREAM,
     6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
     [socket.AF_INET, socket.SOCK_STREAM,
     6, '', ['93.184.216.34', 80]]]
    
    3 socket paths were assumed to use UTF-8 encoding.

    Changed in version 3. 5. Writable bytes-like object is now accepted.

  • A pair

    >>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
    [[socket.AF_INET6, socket.SOCK_STREAM,
     6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
     [socket.AF_INET, socket.SOCK_STREAM,
     6, '', ['93.184.216.34', 80]]]
    
    6 is used for the
    >>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
    [[socket.AF_INET6, socket.SOCK_STREAM,
     6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
     [socket.AF_INET, socket.SOCK_STREAM,
     6, '', ['93.184.216.34', 80]]]
    
    7 address family, where host is a string representing either a hostname in internet domain notation like
    >>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
    [[socket.AF_INET6, socket.SOCK_STREAM,
     6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
     [socket.AF_INET, socket.SOCK_STREAM,
     6, '', ['93.184.216.34', 80]]]
    
    8 or an IPv4 address like
    >>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
    [[socket.AF_INET6, socket.SOCK_STREAM,
     6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
     [socket.AF_INET, socket.SOCK_STREAM,
     6, '', ['93.184.216.34', 80]]]
    
    9, and port is an integer

    • For IPv4 addresses, two special forms are accepted instead of a host address.

      import socket
      
      addr = ["", 8080]  # all interfaces, port 8080
      if socket.has_dualstack_ipv6[]:
          s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
      else:
          s = socket.create_server[addr]
      
      50 represents
      import socket
      
      addr = ["", 8080]  # all interfaces, port 8080
      if socket.has_dualstack_ipv6[]:
          s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
      else:
          s = socket.create_server[addr]
      
      51, which is used to bind to all interfaces, and the string
      import socket
      
      addr = ["", 8080]  # all interfaces, port 8080
      if socket.has_dualstack_ipv6[]:
          s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
      else:
          s = socket.create_server[addr]
      
      52 represents
      import socket
      
      addr = ["", 8080]  # all interfaces, port 8080
      if socket.has_dualstack_ipv6[]:
          s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
      else:
          s = socket.create_server[addr]
      
      53. This behavior is not compatible with IPv6, therefore, you may want to avoid these if you intend to support IPv6 with your Python programs

  • For

    import socket
    
    addr = ["", 8080]  # all interfaces, port 8080
    if socket.has_dualstack_ipv6[]:
        s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
    else:
        s = socket.create_server[addr]
    
    54 address family, a four-tuple
    import socket
    
    addr = ["", 8080]  # all interfaces, port 8080
    if socket.has_dualstack_ipv6[]:
        s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
    else:
        s = socket.create_server[addr]
    
    55 is used, where flowinfo and scope_id represent the
    import socket
    
    addr = ["", 8080]  # all interfaces, port 8080
    if socket.has_dualstack_ipv6[]:
        s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
    else:
        s = socket.create_server[addr]
    
    56 and
    import socket
    
    addr = ["", 8080]  # all interfaces, port 8080
    if socket.has_dualstack_ipv6[]:
        s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
    else:
        s = socket.create_server[addr]
    
    57 members in
    import socket
    
    addr = ["", 8080]  # all interfaces, port 8080
    if socket.has_dualstack_ipv6[]:
        s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
    else:
        s = socket.create_server[addr]
    
    58 in C. For
    import socket
    
    addr = ["", 8080]  # all interfaces, port 8080
    if socket.has_dualstack_ipv6[]:
        s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
    else:
        s = socket.create_server[addr]
    
    5 module methods, flowinfo and scope_id can be omitted just for backward compatibility. Note, however, omission of scope_id can cause problems in manipulating scoped IPv6 addresses

    Changed in version 3. 7. Đối với địa chỉ multicast [với scope_id có ý nghĩa], địa chỉ không được chứa phần

    import socket
    
    addr = ["", 8080]  # all interfaces, port 8080
    if socket.has_dualstack_ipv6[]:
        s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
    else:
        s = socket.create_server[addr]
    
    50 [hoặc
    import socket
    
    addr = ["", 8080]  # all interfaces, port 8080
    if socket.has_dualstack_ipv6[]:
        s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
    else:
        s = socket.create_server[addr]
    
    51]. This information is superfluous and may be safely omitted [recommended].

  • import socket
    
    addr = ["", 8080]  # all interfaces, port 8080
    if socket.has_dualstack_ipv6[]:
        s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
    else:
        s = socket.create_server[addr]
    
    52 sockets are represented as pairs
    import socket
    
    addr = ["", 8080]  # all interfaces, port 8080
    if socket.has_dualstack_ipv6[]:
        s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
    else:
        s = socket.create_server[addr]
    
    53

  • Linux-only support for TIPC is available using the

    import socket
    
    addr = ["", 8080]  # all interfaces, port 8080
    if socket.has_dualstack_ipv6[]:
        s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
    else:
        s = socket.create_server[addr]
    
    54 address family. TIPC is an open, non-IP based networked protocol designed for use in clustered computer environments. Addresses are represented by a tuple, and the fields depend on the address type. The general tuple form is
    import socket
    
    addr = ["", 8080]  # all interfaces, port 8080
    if socket.has_dualstack_ipv6[]:
        s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
    else:
        s = socket.create_server[addr]
    
    55, where

    • addr_type is one of

      import socket
      
      addr = ["", 8080]  # all interfaces, port 8080
      if socket.has_dualstack_ipv6[]:
          s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
      else:
          s = socket.create_server[addr]
      
      56,
      import socket
      
      addr = ["", 8080]  # all interfaces, port 8080
      if socket.has_dualstack_ipv6[]:
          s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
      else:
          s = socket.create_server[addr]
      
      57, or
      import socket
      
      addr = ["", 8080]  # all interfaces, port 8080
      if socket.has_dualstack_ipv6[]:
          s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
      else:
          s = socket.create_server[addr]
      
      58

    • scope is one of

      import socket
      
      addr = ["", 8080]  # all interfaces, port 8080
      if socket.has_dualstack_ipv6[]:
          s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
      else:
          s = socket.create_server[addr]
      
      59,
      import socket
      
      addr = ["", 8080]  # all interfaces, port 8080
      if socket.has_dualstack_ipv6[]:
          s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
      else:
          s = socket.create_server[addr]
      
      50, and
      import socket
      
      addr = ["", 8080]  # all interfaces, port 8080
      if socket.has_dualstack_ipv6[]:
          s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
      else:
          s = socket.create_server[addr]
      
      51

    • If addr_type is

      import socket
      
      addr = ["", 8080]  # all interfaces, port 8080
      if socket.has_dualstack_ipv6[]:
          s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
      else:
          s = socket.create_server[addr]
      
      57, then v1 is the server type, v2 is the port identifier, and v3 should be 0

      If addr_type is

      import socket
      
      addr = ["", 8080]  # all interfaces, port 8080
      if socket.has_dualstack_ipv6[]:
          s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
      else:
          s = socket.create_server[addr]
      
      56, then v1 is the server type, v2 is the lower port number, and v3 is the upper port number

      If addr_type is

      import socket
      
      addr = ["", 8080]  # all interfaces, port 8080
      if socket.has_dualstack_ipv6[]:
          s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
      else:
          s = socket.create_server[addr]
      
      58, then v1 is the node, v2 is the reference, and v3 should be set to 0

  • A tuple

    import socket
    
    addr = ["", 8080]  # all interfaces, port 8080
    if socket.has_dualstack_ipv6[]:
        s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
    else:
        s = socket.create_server[addr]
    
    55 is used for the
    import socket
    
    addr = ["", 8080]  # all interfaces, port 8080
    if socket.has_dualstack_ipv6[]:
        s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
    else:
        s = socket.create_server[addr]
    
    56 address family, where interface is a string representing a network interface name like
    import socket
    
    addr = ["", 8080]  # all interfaces, port 8080
    if socket.has_dualstack_ipv6[]:
        s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
    else:
        s = socket.create_server[addr]
    
    57. The network interface name
    import socket
    
    addr = ["", 8080]  # all interfaces, port 8080
    if socket.has_dualstack_ipv6[]:
        s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
    else:
        s = socket.create_server[addr]
    
    50 can be used to receive packets from all network interfaces of this family

    • import socket
      
      addr = ["", 8080]  # all interfaces, port 8080
      if socket.has_dualstack_ipv6[]:
          s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
      else:
          s = socket.create_server[addr]
      
      59 protocol require a tuple
      import socket
      
      addr = ["", 8080]  # all interfaces, port 8080
      if socket.has_dualstack_ipv6[]:
          s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
      else:
          s = socket.create_server[addr]
      
      50 where both additional parameters are unsigned long integer that represent a CAN identifier [standard or extended]

    • import socket
      
      addr = ["", 8080]  # all interfaces, port 8080
      if socket.has_dualstack_ipv6[]:
          s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
      else:
          s = socket.create_server[addr]
      
      51 protocol require a tuple
      import socket
      
      addr = ["", 8080]  # all interfaces, port 8080
      if socket.has_dualstack_ipv6[]:
          s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
      else:
          s = socket.create_server[addr]
      
      52 where additional parameters are 64-bit unsigned integer representing the ECU name, a 32-bit unsigned integer representing the Parameter Group Number [PGN], and an 8-bit integer representing the address

  • A string or a tuple

    import socket
    
    addr = ["", 8080]  # all interfaces, port 8080
    if socket.has_dualstack_ipv6[]:
        s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
    else:
        s = socket.create_server[addr]
    
    53 is used for the
    import socket
    
    addr = ["", 8080]  # all interfaces, port 8080
    if socket.has_dualstack_ipv6[]:
        s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
    else:
        s = socket.create_server[addr]
    
    54 protocol of the
    import socket
    
    addr = ["", 8080]  # all interfaces, port 8080
    if socket.has_dualstack_ipv6[]:
        s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
    else:
        s = socket.create_server[addr]
    
    55 family. The string is the name of a kernel control using a dynamically assigned ID. The tuple can be used if ID and unit number of the kernel control are known or if a registered ID is used

    Mới trong phiên bản 3. 3

  • import socket
    
    addr = ["", 8080]  # all interfaces, port 8080
    if socket.has_dualstack_ipv6[]:
        s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
    else:
        s = socket.create_server[addr]
    
    56 supports the following protocols and address formats

    • import socket
      
      addr = ["", 8080]  # all interfaces, port 8080
      if socket.has_dualstack_ipv6[]:
          s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
      else:
          s = socket.create_server[addr]
      
      57 accepts
      import socket
      
      addr = ["", 8080]  # all interfaces, port 8080
      if socket.has_dualstack_ipv6[]:
          s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
      else:
          s = socket.create_server[addr]
      
      58 where
      import socket
      
      addr = ["", 8080]  # all interfaces, port 8080
      if socket.has_dualstack_ipv6[]:
          s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
      else:
          s = socket.create_server[addr]
      
      59 is the Bluetooth address as a string and
      >>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
      [[socket.AF_INET6, socket.SOCK_STREAM,
       6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
       [socket.AF_INET, socket.SOCK_STREAM,
       6, '', ['93.184.216.34', 80]]]
      
      50 is an integer

    • >>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
      [[socket.AF_INET6, socket.SOCK_STREAM,
       6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
       [socket.AF_INET, socket.SOCK_STREAM,
       6, '', ['93.184.216.34', 80]]]
      
      51 accepts
      >>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
      [[socket.AF_INET6, socket.SOCK_STREAM,
       6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
       [socket.AF_INET, socket.SOCK_STREAM,
       6, '', ['93.184.216.34', 80]]]
      
      52 where
      import socket
      
      addr = ["", 8080]  # all interfaces, port 8080
      if socket.has_dualstack_ipv6[]:
          s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
      else:
          s = socket.create_server[addr]
      
      59 is the Bluetooth address as a string and
      >>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
      [[socket.AF_INET6, socket.SOCK_STREAM,
       6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
       [socket.AF_INET, socket.SOCK_STREAM,
       6, '', ['93.184.216.34', 80]]]
      
      54 is an integer

    • >>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
      [[socket.AF_INET6, socket.SOCK_STREAM,
       6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
       [socket.AF_INET, socket.SOCK_STREAM,
       6, '', ['93.184.216.34', 80]]]
      
      55 accepts
      >>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
      [[socket.AF_INET6, socket.SOCK_STREAM,
       6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
       [socket.AF_INET, socket.SOCK_STREAM,
       6, '', ['93.184.216.34', 80]]]
      
      56 where
      >>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
      [[socket.AF_INET6, socket.SOCK_STREAM,
       6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
       [socket.AF_INET, socket.SOCK_STREAM,
       6, '', ['93.184.216.34', 80]]]
      
      57 is either an integer or a string with the Bluetooth address of the interface. [This depends on your OS; NetBSD and DragonFlyBSD expect a Bluetooth address while everything else expects an integer. ]

      Changed in version 3. 2. NetBSD and DragonFlyBSD support added.

    • >>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
      [[socket.AF_INET6, socket.SOCK_STREAM,
       6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
       [socket.AF_INET, socket.SOCK_STREAM,
       6, '', ['93.184.216.34', 80]]]
      
      58 accepts
      import socket
      
      addr = ["", 8080]  # all interfaces, port 8080
      if socket.has_dualstack_ipv6[]:
          s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
      else:
          s = socket.create_server[addr]
      
      59 where
      import socket
      
      addr = ["", 8080]  # all interfaces, port 8080
      if socket.has_dualstack_ipv6[]:
          s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
      else:
          s = socket.create_server[addr]
      
      59 is a
      >>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
      [[socket.AF_INET6, socket.SOCK_STREAM,
       6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
       [socket.AF_INET, socket.SOCK_STREAM,
       6, '', ['93.184.216.34', 80]]]
      
      61 object containing the Bluetooth address in a string format. [ex.
      >>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
      [[socket.AF_INET6, socket.SOCK_STREAM,
       6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
       [socket.AF_INET, socket.SOCK_STREAM,
       6, '', ['93.184.216.34', 80]]]
      
      62] This protocol is not supported under FreeBSD

  • >>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
    [[socket.AF_INET6, socket.SOCK_STREAM,
     6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
     [socket.AF_INET, socket.SOCK_STREAM,
     6, '', ['93.184.216.34', 80]]]
    
    63 is a Linux-only socket based interface to Kernel cryptography. An algorithm socket is configured with a tuple of two to four elements
    >>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
    [[socket.AF_INET6, socket.SOCK_STREAM,
     6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
     [socket.AF_INET, socket.SOCK_STREAM,
     6, '', ['93.184.216.34', 80]]]
    
    64, where

    • type is the algorithm type as string, e. g.

      >>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
      [[socket.AF_INET6, socket.SOCK_STREAM,
       6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
       [socket.AF_INET, socket.SOCK_STREAM,
       6, '', ['93.184.216.34', 80]]]
      
      65,
      >>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
      [[socket.AF_INET6, socket.SOCK_STREAM,
       6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
       [socket.AF_INET, socket.SOCK_STREAM,
       6, '', ['93.184.216.34', 80]]]
      
      66,
      >>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
      [[socket.AF_INET6, socket.SOCK_STREAM,
       6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
       [socket.AF_INET, socket.SOCK_STREAM,
       6, '', ['93.184.216.34', 80]]]
      
      67 or
      >>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
      [[socket.AF_INET6, socket.SOCK_STREAM,
       6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
       [socket.AF_INET, socket.SOCK_STREAM,
       6, '', ['93.184.216.34', 80]]]
      
      68

    • name is the algorithm name and operation mode as string, e. g.

      >>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
      [[socket.AF_INET6, socket.SOCK_STREAM,
       6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
       [socket.AF_INET, socket.SOCK_STREAM,
       6, '', ['93.184.216.34', 80]]]
      
      69,
      >>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
      [[socket.AF_INET6, socket.SOCK_STREAM,
       6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
       [socket.AF_INET, socket.SOCK_STREAM,
       6, '', ['93.184.216.34', 80]]]
      
      50,
      >>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
      [[socket.AF_INET6, socket.SOCK_STREAM,
       6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
       [socket.AF_INET, socket.SOCK_STREAM,
       6, '', ['93.184.216.34', 80]]]
      
      51 or
      >>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
      [[socket.AF_INET6, socket.SOCK_STREAM,
       6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
       [socket.AF_INET, socket.SOCK_STREAM,
       6, '', ['93.184.216.34', 80]]]
      
      52

    • feat and mask are unsigned 32bit integers

    Availability . Linux >= 2. 6. 38.

    Some algorithm types require more recent Kernels

    New in version 3. 6

  • >>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
    [[socket.AF_INET6, socket.SOCK_STREAM,
     6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
     [socket.AF_INET, socket.SOCK_STREAM,
     6, '', ['93.184.216.34', 80]]]
    
    53 allows communication between virtual machines and their hosts. The sockets are represented as a
    >>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
    [[socket.AF_INET6, socket.SOCK_STREAM,
     6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
     [socket.AF_INET, socket.SOCK_STREAM,
     6, '', ['93.184.216.34', 80]]]
    
    54 tuple where the context ID or CID and port are integers

    Availability . Linux >= 3. 9

    See vsock[7]

    New in version 3. 7

  • >>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
    [[socket.AF_INET6, socket.SOCK_STREAM,
     6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
     [socket.AF_INET, socket.SOCK_STREAM,
     6, '', ['93.184.216.34', 80]]]
    
    55 is a low-level interface directly to network devices. The packets are represented by the tuple
    >>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
    [[socket.AF_INET6, socket.SOCK_STREAM,
     6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
     [socket.AF_INET, socket.SOCK_STREAM,
     6, '', ['93.184.216.34', 80]]]
    
    56 where

    • ifname - String specifying the device name

    • proto - An in network-byte-order integer specifying the Ethernet protocol number

    • pkttype - Optional integer specifying the packet type

      • >>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
        [[socket.AF_INET6, socket.SOCK_STREAM,
         6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
         [socket.AF_INET, socket.SOCK_STREAM,
         6, '', ['93.184.216.34', 80]]]
        
        57 [the default] - Packet addressed to the local host

      • >>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
        [[socket.AF_INET6, socket.SOCK_STREAM,
         6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
         [socket.AF_INET, socket.SOCK_STREAM,
         6, '', ['93.184.216.34', 80]]]
        
        58 - Physical-layer broadcast packet

      • >>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
        [[socket.AF_INET6, socket.SOCK_STREAM,
         6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
         [socket.AF_INET, socket.SOCK_STREAM,
         6, '', ['93.184.216.34', 80]]]
        
        59 - Packet sent to a physical-layer multicast address

      • import socket
        
        addr = ["", 8080]  # all interfaces, port 8080
        if socket.has_dualstack_ipv6[]:
            s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
        else:
            s = socket.create_server[addr]
        
        00 - Packet to some other host that has been caught by a device driver in promiscuous mode

      • import socket
        
        addr = ["", 8080]  # all interfaces, port 8080
        if socket.has_dualstack_ipv6[]:
            s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
        else:
            s = socket.create_server[addr]
        
        01 - Packet originating from the local host that is looped back to a packet socket

    • hatype - Optional integer specifying the ARP hardware address type

    • addr - Optional bytes-like object specifying the hardware physical address, whose interpretation depends on the device

    Availability . Linux >= 2. 2.

  • import socket
    
    addr = ["", 8080]  # all interfaces, port 8080
    if socket.has_dualstack_ipv6[]:
        s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
    else:
        s = socket.create_server[addr]
    
    02 is a Linux-only socket based interface for communicating with services running on co-processors in Qualcomm platforms. The address family is represented as a
    import socket
    
    addr = ["", 8080]  # all interfaces, port 8080
    if socket.has_dualstack_ipv6[]:
        s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
    else:
        s = socket.create_server[addr]
    
    03 tuple where the node and port are non-negative integers

    Availability . Linux >= 4. 7.

    Mới trong phiên bản 3. 8

  • import socket
    
    addr = ["", 8080]  # all interfaces, port 8080
    if socket.has_dualstack_ipv6[]:
        s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
    else:
        s = socket.create_server[addr]
    
    04 is a variant of UDP which allows you to specify what portion of a packet is covered with the checksum. It adds two socket options that you can change.
    import socket
    
    addr = ["", 8080]  # all interfaces, port 8080
    if socket.has_dualstack_ipv6[]:
        s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
    else:
        s = socket.create_server[addr]
    
    05 will change what portion of outgoing packets are covered by the checksum and
    import socket
    
    addr = ["", 8080]  # all interfaces, port 8080
    if socket.has_dualstack_ipv6[]:
        s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
    else:
        s = socket.create_server[addr]
    
    06 will filter out packets which cover too little of their data. In both cases
    import socket
    
    addr = ["", 8080]  # all interfaces, port 8080
    if socket.has_dualstack_ipv6[]:
        s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
    else:
        s = socket.create_server[addr]
    
    07 should be in
    import socket
    
    addr = ["", 8080]  # all interfaces, port 8080
    if socket.has_dualstack_ipv6[]:
        s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
    else:
        s = socket.create_server[addr]
    
    08

    Such a socket should be constructed with

    import socket
    
    addr = ["", 8080]  # all interfaces, port 8080
    if socket.has_dualstack_ipv6[]:
        s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
    else:
        s = socket.create_server[addr]
    
    09 for IPv4 or
    import socket
    
    addr = ["", 8080]  # all interfaces, port 8080
    if socket.has_dualstack_ipv6[]:
        s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
    else:
        s = socket.create_server[addr]
    
    10 for IPv6

    Availability . Linux >= 2. 6. 20, FreeBSD >= 10. 1

    New in version 3. 9

If you use a hostname in the host portion of IPv4/v6 socket address, the program may show a nondeterministic behavior, as Python uses the first address returned from the DNS resolution. The socket address will be resolved differently into an actual IPv4/v6 address, depending on the results from DNS resolution and/or the host configuration. For deterministic behavior use a numeric address in host portion

All errors raise exceptions. The normal exceptions for invalid argument types and out-of-memory conditions can be raised. Errors related to socket or address semantics raise

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
11 or one of its subclasses

Non-blocking mode is supported through

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
12. A generalization of this based on timeouts is supported through
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
13

Module contents¶

The module

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
5 exports the following elements

Exceptions¶

exception socket. error

A deprecated alias of

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
11

Changed in version 3. 3. Following PEP 3151, this class was made an alias of

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
11.

exception socket. herror

A subclass of

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
11, this exception is raised for address-related errors, i. e. for functions that use h_errno in the POSIX C API, including
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
18 and
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
19. The accompanying value is a pair
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
20 representing an error returned by a library call. h_errno is a numeric value, while string represents the description of h_errno, as returned by the
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
21 C function

Changed in version 3. 3. This class was made a subclass of

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
11.

exception socket. gaierror

A subclass of

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
11, this exception is raised for address-related errors by
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
24 and
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
25. The accompanying value is a pair
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
26 representing an error returned by a library call. string represents the description of error, as returned by the
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
27 C function. The numeric error value will match one of the
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
28 constants defined in this module

Changed in version 3. 3. This class was made a subclass of

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
11.

ngoại lệ ổ cắm. hết giờ

Bí danh không dùng nữa của

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
30

Một lớp con của

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
11, ngoại lệ này được đưa ra khi thời gian chờ xảy ra trên một ổ cắm đã kích hoạt thời gian chờ thông qua lệnh gọi trước tới
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
13 [hoặc ngầm định thông qua
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
33]. Giá trị đi kèm là một chuỗi có giá trị hiện tại luôn ở trạng thái “timed out”

Changed in version 3. 3. This class was made a subclass of

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
11.

Đã thay đổi trong phiên bản 3. 10. Lớp này có bí danh là

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
30.

Hằng số¶

Các hằng số AF_* và SOCK_* hiện là các tập hợp

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
36 và
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
37
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
38

Mới trong phiên bản 3. 4

ổ cắm. AF_UNIXổ cắm. AF_INETổ cắm. AF_INET6

Các hằng số này đại diện cho các họ địa chỉ [và giao thức], được sử dụng cho đối số đầu tiên của

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
8. Nếu hằng số
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
3 không được xác định thì giao thức này không được hỗ trợ. Có thể có nhiều hằng số hơn tùy thuộc vào hệ thống

ổ cắm. SOCK_STREAMổ cắm. SOCK_DGRAMổ cắm. SOCK_RAWổ cắm. SOCK_RDMổ cắm. SOCK_SEQPACKET

Các hằng số này đại diện cho các loại ổ cắm, được sử dụng cho đối số thứ hai của

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
8. Có thể có nhiều hằng số hơn tùy thuộc vào hệ thống. [Chỉ có
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
42 và
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
43 nhìn chung là hữu ích. ]

ổ cắm. SOCK_CLOEXECổ cắm. SOCK_NONBLOCK

Hai hằng số này, nếu được xác định, có thể được kết hợp với các loại ổ cắm và cho phép bạn đặt một số cờ một cách nguyên tử [do đó tránh được các điều kiện chạy đua có thể xảy ra và nhu cầu gọi riêng]

See also

Xử lý mô tả tệp an toàn để được giải thích kỹ lưỡng hơn

Tính khả dụng . Linux >= 2. 6. 27.

Mới trong phiên bản 3. 2

SO_*ổ cắm. SOMAXCONNMSG_*SOL_*SCM_*IPPROTO_*IPPORT_*INADDR_*IP_*IPV6_*EAI_*AI_*NI_*TCP_*

Nhiều hằng số của các dạng này, được ghi lại trong tài liệu Unix về ổ cắm và/hoặc giao thức IP, cũng được xác định trong mô-đun ổ cắm. Chúng thường được sử dụng trong các đối số cho các phương thức

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
44 và
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
45 của các đối tượng ổ cắm. Trong hầu hết các trường hợp, chỉ những ký hiệu được xác định trong tệp tiêu đề Unix mới được xác định;

Đã thay đổi trong phiên bản 3. 6. ______146,

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
47,
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
48,
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
49,
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
50,
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
51 đã được thêm vào.

Đã thay đổi trong phiên bản 3. 6. 5. Trên Windows,

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
52,
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
53 xuất hiện nếu Windows hỗ trợ thời gian chạy.

Đã thay đổi trong phiên bản 3. 7. ______154 đã được thêm vào.

Trên Windows,

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
55,
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
56 xuất hiện nếu thời gian chạy Windows hỗ trợ

Đã thay đổi trong phiên bản 3. 10. ______157 đã được thêm vào. Đã thêm

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
58. Trên MacOS, hằng số này có thể được sử dụng giống như cách mà
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
55 được sử dụng trên Linux.

Đã thay đổi trong phiên bản 3. 11. Đã thêm

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
60. Trên MacOS, hằng số này có thể được sử dụng giống như cách mà
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
61 được sử dụng trên Linux và BSD.

ổ cắm. AF_CANổ cắm. PF_CANSOL_CAN_*CAN_*

Nhiều hằng số của các dạng này, được ghi lại trong tài liệu Linux, cũng được định nghĩa trong mô-đun ổ cắm

Tính khả dụng . Linux >= 2. 6. 25, NetBSD >= 8.

Mới trong phiên bản 3. 3

Đã thay đổi trong phiên bản 3. 11. Đã thêm hỗ trợ NetBSD.

ổ cắm. CAN_BCMCAN_BCM_*

CAN_BCM, trong họ giao thức CAN, là giao thức quản lý quảng bá [BCM]. Các hằng số của trình quản lý phát sóng, được ghi lại trong tài liệu Linux, cũng được xác định trong mô-đun ổ cắm

Tính khả dụng . Linux >= 2. 6. 25.

Note

Cờ

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
62 chỉ khả dụng trên Linux >= 4. 8

Mới trong phiên bản 3. 4

ổ cắm. CAN_RAW_FD_FRAMES

Cho phép hỗ trợ CAN FD trong ổ cắm CAN_RAW. Điều này bị tắt theo mặc định. Điều này cho phép ứng dụng của bạn gửi cả khung CAN và CAN FD;

Hằng số này được ghi lại trong tài liệu Linux

Tính khả dụng . Linux >= 3. 6.

Mới trong phiên bản 3. 5

ổ cắm. CAN_RAW_JOIN_FILTERS

Tham gia các bộ lọc CAN được áp dụng sao cho chỉ các khung CAN khớp với tất cả các bộ lọc CAN đã cho mới được chuyển đến không gian người dùng

Hằng số này được ghi lại trong tài liệu Linux

Tính khả dụng . Linux >= 4. 1.

New in version 3. 9

ổ cắm. CAN_ISOTP

CAN_ISOTP, trong họ giao thức CAN, là giao thức ISO-TP [ISO 15765-2]. Các hằng số ISO-TP, được ghi lại trong tài liệu Linux

Tính khả dụng . Linux >= 2. 6. 25.

New in version 3. 7

ổ cắm. CAN_J1939

CAN_J1939, trong họ giao thức CAN, là giao thức SAE J1939. Các hằng số J1939, được ghi lại trong tài liệu Linux

Tính khả dụng . Linux >= 5. 4.

New in version 3. 9

ổ cắm. AF_PACKETổ cắm. PF_PACKETPACKET_*

Nhiều hằng số của các dạng này, được ghi lại trong tài liệu Linux, cũng được định nghĩa trong mô-đun ổ cắm

Availability . Linux >= 2. 2.

ổ cắm. AF_RDSổ cắm. PF_RDSổ cắm. SOL_RDSRDS_*

Nhiều hằng số của các dạng này, được ghi lại trong tài liệu Linux, cũng được định nghĩa trong mô-đun ổ cắm

Tính khả dụng . Linux >= 2. 6. 30.

Mới trong phiên bản 3. 3

ổ cắm. SIO_RCVALLổ cắm. SIO_KEEPALIVE_VALSổ cắm. SIO_LOOPBACK_FAST_PATHRCVALL_*

Các hằng số cho WSAIoctl[] của Windows. Các hằng số được sử dụng làm đối số cho phương thức

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
63 của các đối tượng ổ cắm

Đã thay đổi trong phiên bản 3. 6. ______164 đã được thêm vào.

MẸO_*

Các hằng số liên quan đến TIPC, khớp với các hằng số được xuất bởi API ổ cắm C. Xem tài liệu TIPC để biết thêm thông tin

ổ cắm. AF_ALGổ cắm. SOL_ALGALG_*

Các hằng số cho mã hóa hạt nhân Linux

Availability . Linux >= 2. 6. 38.

New in version 3. 6

ổ cắm. AF_VSOCKổ cắm. IOCTL_VM_SOCKETS_GET_LOCAL_CIDVMADDR*SO_VM*

Các hằng số cho giao tiếp máy chủ/khách Linux

Tính khả dụng . Linux >= 4. 8.

New in version 3. 7

ổ cắm. AF_LINK

Tính khả dụng . BSD, macOS.

Mới trong phiên bản 3. 4

ổ cắm. has_ipv6

Hằng số này chứa một giá trị boolean cho biết liệu IPv6 có được hỗ trợ trên nền tảng này hay không

ổ cắm. BDADDR_ANYổ cắm. BDADDR_LOCAL

Đây là các hằng chuỗi chứa địa chỉ Bluetooth có ý nghĩa đặc biệt. Ví dụ: có thể sử dụng

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
65 để chỉ ra bất kỳ địa chỉ nào khi chỉ định ổ cắm liên kết với
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
51

ổ cắm. HCI_FILTERổ cắm. HCI_TIME_STAMPổ cắm. HCI_DATA_DIR

Để sử dụng với

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
55.
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
68 không khả dụng cho NetBSD hoặc DragonFlyBSD.
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
69 và
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
70 không có sẵn cho FreeBSD, NetBSD hoặc DragonFlyBSD

ổ cắm. AF_QIPCRTR

Hằng số cho giao thức bộ định tuyến IPC của Qualcomm, được sử dụng để giao tiếp với dịch vụ cung cấp bộ xử lý từ xa

Availability . Linux >= 4. 7.

ổ cắm. SCM_CREDS2ổ cắm. LOCAL_CREDSổ cắm. LOCAL_CREDS_PERSISTENT

LOCAL_CREDS và LOCAL_CREDS_PERSISTENT có thể được sử dụng với ổ cắm SOCK_DGRAM, SOCK_STREAM, tương đương với Linux/DragonFlyBSD SO_PASSCRED, trong khi LOCAL_CREDS gửi thông tin đăng nhập ở lần đọc đầu tiên, LOCAL_CREDS_PERSISTENT gửi cho mỗi lần đọc, SCM_CREDS2 sau đó phải được sử dụng cho lần đọc sau đối với loại thông báo

Mới trong phiên bản 3. 11

Tính khả dụng . BSD miễn phí.

ổ cắm. SO_INCOMING_CPU

Hằng số để tối ưu hóa vị trí CPU, được sử dụng cùng với

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
71

Mới trong phiên bản 3. 11

Availability . Linux >= 3. 9

Chức năng¶

Tạo ổ cắm¶

Tất cả các chức năng sau đây đều tạo ra đối tượng ổ cắm .

lớp . ổ cắm[gia đình=AF_INET, type=SOCK_STREAM, proto=0, fileno=None]

Tạo một ổ cắm mới bằng cách sử dụng họ địa chỉ, loại ổ cắm và số giao thức đã cho. Họ địa chỉ phải là

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
7 [mặc định],
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
54,
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
3,
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
56,
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
55 hoặc
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
77. Loại ổ cắm phải là
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
42 [mặc định],
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
43,
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
80 hoặc có lẽ là một trong các hằng số
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
81 khác. Số giao thức thường bằng 0 và có thể bị bỏ qua hoặc trong trường hợp họ địa chỉ là
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
56 thì giao thức phải là một trong số
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
83,
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
84,
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
59 hoặc
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
51

Nếu fileno được chỉ định, các giá trị cho họ, loại và nguyên mẫu được tự động phát hiện từ bộ mô tả tệp đã chỉ định. Tự động phát hiện có thể bị ghi đè bằng cách gọi hàm với các đối số họ, loại hoặc proto rõ ràng. Điều này chỉ ảnh hưởng đến cách Python đại diện cho e. g. giá trị trả về của

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
87 nhưng không phải là tài nguyên hệ điều hành thực tế. Không giống như
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
88, fileno sẽ trả về cùng một ổ cắm và không trùng lặp. Điều này có thể giúp đóng một ổ cắm tách rời bằng cách sử dụng
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
89

Ổ cắm mới được tạo là không thể kế thừa .

Tăng sự kiện kiểm tra

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
90 với các đối số
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
91,
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
92,
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
93,
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
94.

Đã thay đổi trong phiên bản 3. 3. Dòng AF_CAN đã được thêm vào. Họ AF_RDS đã được thêm vào.

Đã thay đổi trong phiên bản 3. 4. Giao thức CAN_BCM đã được thêm vào.

Đã thay đổi trong phiên bản 3. 4. Ổ cắm được trả về hiện không thể kế thừa.

Đã thay đổi trong phiên bản 3. 7. Giao thức CAN_ISOTP đã được thêm vào.

Changed in version 3. 7. When

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
95 or
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
96 bit flags are applied to type they are cleared, and
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
97 will not reflect them. Chúng vẫn được chuyển đến cuộc gọi
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
8 của hệ thống cơ bản. Vì vậy,

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
84

vẫn sẽ tạo non-blocking socket trên các hệ điều hành hỗ trợ

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
95, nhưng
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
00 sẽ được đặt thành
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
01

Đã thay đổi trong phiên bản 3. 9. The CAN_J1939 protocol was added.

Changed in version 3. 10. Giao thức IPPROTO_MPTCP đã được thêm vào.

ổ cắm. cặp ổ cắm[[gia đình[, type[, proto]]]]

Build a pair of connected socket objects using the given address family, socket type, and protocol number. Họ địa chỉ, loại ổ cắm và số giao thức giống như chức năng

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
8 ở trên. Họ mặc định là
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
3 nếu được xác định trên nền tảng;

Ổ cắm mới được tạo không thể kế thừa .

Changed in version 3. 2. The returned socket objects now support the whole socket API, rather than a subset.

Changed in version 3. 4. Các ổ cắm được trả lại hiện không thể kế thừa.

Đã thay đổi trong phiên bản 3. 5. Đã thêm hỗ trợ Windows.

ổ cắm. create_connection[địa chỉ , thời gian chờ=GLOBAL_DEFAULT, source_address=None, *, all_errors=False]

Connect to a TCP service listening on the internet address [a 2-tuple

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
6], and return the socket object. Đây là một chức năng cấp cao hơn so với
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
06. nếu máy chủ lưu trữ là một tên máy chủ không phải dạng số, nó sẽ cố gắng phân giải nó cho cả
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
7 và
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
54, sau đó lần lượt cố gắng kết nối với tất cả các địa chỉ có thể cho đến khi kết nối thành công. Điều này giúp dễ dàng viết các ứng dụng khách tương thích với cả IPv4 và IPv6

Truyền tham số thời gian chờ tùy chọn sẽ đặt thời gian chờ trên phiên bản ổ cắm trước khi thử kết nối. Nếu không có thời gian chờ nào được cung cấp, thì cài đặt thời gian chờ mặc định chung do

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
09 trả về sẽ được sử dụng

Nếu được cung cấp, source_address phải là 2-tuple

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
6 để ổ cắm liên kết thành địa chỉ nguồn của nó trước khi kết nối. Nếu máy chủ hoặc cổng tương ứng là ‘’ hoặc 0 thì hành vi mặc định của hệ điều hành sẽ được sử dụng

Khi không thể tạo kết nối, một ngoại lệ được đưa ra. By default, it is the exception from the last address in the list. Nếu all_errors là

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
11, thì đó là một
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
12 chứa lỗi của tất cả các lần thử

Changed in version 3. 2. source_address đã được thêm.

Đã thay đổi trong phiên bản 3. 11. all_errors was added.

socket. create_server[địa chỉ , *, family=AF_INET, backlog=None, reuse_port=False, dualstack_ipv6=False]

Hàm tiện lợi tạo ổ cắm TCP được liên kết với địa chỉ [2-tuple

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
6] và trả về đối tượng ổ cắm

gia đình nên là

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
7 hoặc
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
54. tồn đọng là kích thước hàng đợi được chuyển đến
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
16; . tái sử dụng_port ra lệnh có đặt tùy chọn ổ cắm
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
71 hay không

Nếu dualstack_ipv6 là đúng và nền tảng hỗ trợ nó thì ổ cắm sẽ có thể chấp nhận cả kết nối IPv4 và IPv6, nếu không thì nó sẽ tăng

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
19. Most POSIX platforms and Windows are supposed to support this functionality. Khi chức năng này được bật, địa chỉ được trả về bởi
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
87 khi xảy ra kết nối IPv4 sẽ là địa chỉ IPv6 được biểu thị dưới dạng địa chỉ IPv6 được ánh xạ IPv4. Nếu dualstack_ipv6 là false, nó sẽ vô hiệu hóa chức năng này một cách rõ ràng trên các nền tảng kích hoạt nó theo mặc định [e. g. Linux]. This parameter can be used in conjunction with
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
21

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]

Note

Trên nền tảng POSIX, tùy chọn ổ cắm

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
22 được đặt để sử dụng lại ngay các ổ cắm trước đó được liên kết trên cùng một địa chỉ và duy trì ở trạng thái TIME_WAIT

Mới trong phiên bản 3. 8

ổ cắm. has_dualstack_ipv6[]

Return

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
11 if the platform supports creating a TCP socket which can handle both IPv4 and IPv6 connections

Mới trong phiên bản 3. 8

socket. từfd[fd , gia đình, type, proto=0]

Sao chép bộ mô tả tệp fd [một số nguyên được trả về bởi phương thức

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
24 của đối tượng tệp] và tạo một đối tượng ổ cắm từ kết quả. Họ địa chỉ, loại ổ cắm và số giao thức giống như hàm
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
8 ở trên. Bộ mô tả tệp phải tham chiếu đến một ổ cắm, nhưng điều này không được chọn — các thao tác tiếp theo trên đối tượng có thể không thành công nếu bộ mô tả tệp không hợp lệ. Chức năng này hiếm khi cần thiết, nhưng có thể được sử dụng để lấy hoặc đặt các tùy chọn ổ cắm trên một ổ cắm được chuyển đến chương trình dưới dạng đầu vào hoặc đầu ra tiêu chuẩn [chẳng hạn như máy chủ được khởi động bởi Unix inet daemon]. The socket is assumed to be in blocking mode

Ổ cắm mới được tạo là không thể kế thừa .

Đã thay đổi trong phiên bản 3. 4. Ổ cắm được trả về hiện không thể kế thừa.

socket. từ chia sẻ[dữ liệu]

Khởi tạo một ổ cắm từ dữ liệu thu được từ phương thức

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
26. The socket is assumed to be in blocking mode

Tính khả dụng . các cửa sổ.

Mới trong phiên bản 3. 3

ổ cắm. Loại ổ cắm

Đây là một đối tượng kiểu Python đại diện cho kiểu đối tượng ổ cắm. Nó giống như

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
27

Other functions¶

The

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
5 module also offers various network-related services

ổ cắm. đóng[fd]

Đóng bộ mô tả tệp ổ cắm. Điều này giống như

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
29, nhưng đối với ổ cắm. Trên một số nền tảng [đáng chú ý nhất là Windows]
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
29 không hoạt động đối với bộ mô tả tệp ổ cắm

New in version 3. 7

ổ cắm. getaddrinfo[máy chủ , cổng, family=0, type=0, proto=0, flags=0]

Dịch đối số máy chủ/cổng thành một chuỗi gồm 5 bộ chứa tất cả các đối số cần thiết để tạo ổ cắm được kết nối với dịch vụ đó. máy chủ lưu trữ là một tên miền, một đại diện chuỗi của địa chỉ IPv4/v6 hoặc

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
31. cổng là tên dịch vụ chuỗi, chẳng hạn như
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
32, số cổng dạng số hoặc
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
31. Bằng cách chuyển
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
31 làm giá trị của máy chủ và cổng, bạn có thể chuyển
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
35 tới API C bên dưới

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. The flags argument can be one or several of the

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
36 constants, and will influence how results are computed and returned. For example,
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
37 will disable domain name resolution and will raise an error if host is a domain name

The function returns a list of 5-tuples with the following structure

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
38

In these tuples, family, type, proto are all integers and are meant to be passed to the

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
8 function. canonname will be a string representing the canonical name of the host if
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
40 is part of the flags argument; else canonname will be empty. sockaddr is a tuple describing a socket address, whose format depends on the returned family [a
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
41 2-tuple for
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
7, a
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
43 4-tuple for
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
54], and is meant to be passed to the
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
06 method

Raises an auditing event

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
46 with arguments
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
47,
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
48,
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
92,
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
93,
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
94.

Ví dụ sau tìm nạp thông tin địa chỉ cho một kết nối TCP giả định tới

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
52 trên cổng 80 [kết quả có thể khác trên hệ thống của bạn nếu IPv6 không được bật]

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]

Đã thay đổi trong phiên bản 3. 2. các tham số hiện có thể được chuyển bằng các đối số từ khóa.

Đã thay đổi trong phiên bản 3. 7. đối với địa chỉ multicast IPv6, chuỗi đại diện cho một địa chỉ sẽ không chứa phần

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
50.

ổ cắm. getfqdn[[tên]]

Trả lại một tên miền đủ điều kiện cho tên. Nếu tên bị bỏ qua hoặc trống, nó được hiểu là máy chủ lưu trữ cục bộ. Để tìm tên đủ điều kiện, tên máy chủ được trả về bởi

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
19 được chọn, theo sau là bí danh cho máy chủ, nếu có. Tên đầu tiên bao gồm một khoảng thời gian được chọn. Trong trường hợp không có tên miền đủ điều kiện và tên đã được cung cấp, nó sẽ được trả về không thay đổi. Nếu tên trống hoặc bằng
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
55, tên máy chủ từ
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
56 được trả về

ổ cắm. gethostbyname[tên máy chủ]

Dịch tên máy chủ sang định dạng địa chỉ IPv4. Địa chỉ IPv4 được trả về dưới dạng một chuỗi, chẳng hạn như

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
9. Nếu tên máy chủ là một địa chỉ IPv4, nó được trả về không thay đổi. Xem
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
18 để có giao diện đầy đủ hơn.
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
59 không hỗ trợ phân giải tên IPv6 và thay vào đó nên sử dụng
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
24 để hỗ trợ ngăn xếp kép IPv4/v6

Tăng sự kiện kiểm tra

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
61 với đối số
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
62.

Tính khả dụng . không phải WASI.

ổ cắm. gethostbyname_ex[tên máy chủ]

Dịch tên máy chủ sang định dạng địa chỉ IPv4, giao diện mở rộng. Trả về một bộ ba

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
63 trong đó tên máy chủ là tên máy chủ chính của máy chủ lưu trữ, danh sách bí danh là danh sách [có thể trống] các tên máy chủ thay thế cho cùng một địa chỉ và ipaddrlist là danh sách các địa chỉ IPv4 cho cùng một giao diện trên cùng một máy chủ [thường nhưng không .
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
18 không hỗ trợ phân giải tên IPv6 và thay vào đó nên sử dụng
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
24 để hỗ trợ ngăn xếp kép IPv4/v6

Tăng sự kiện kiểm tra

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
61 với đối số
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
62.

Tính khả dụng . không phải WASI.

ổ cắm. gethostname[]

Trả về một chuỗi chứa tên máy chủ mà trình thông dịch Python hiện đang thực thi

Tăng sự kiện kiểm tra

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
68 mà không có đối số.

Ghi chú.

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
56 không phải lúc nào cũng trả lại tên miền đủ điều kiện;

Tính khả dụng . không phải WASI.

ổ cắm. gethostbyaddr[ip_address]

Trả về một bộ ba

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
63 trong đó tên máy chủ là tên máy chủ chính phản hồi ip_address đã cho, aliaslist là danh sách [có thể trống] các tên máy chủ thay thế cho cùng một địa chỉ và ipaddrlist là danh sách các địa chỉ IPv4/v6 cho cùng một giao diện trên . Để tìm tên miền đủ điều kiện, hãy sử dụng chức năng
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
70.
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
19 hỗ trợ cả IPv4 và IPv6

Tăng sự kiện kiểm tra

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
74 với đối số
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
75.

Tính khả dụng . không phải WASI.

ổ cắm. getnameinfo[sockaddr , cờ]

Dịch địa chỉ socket sockaddr thành 2-tuple

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
6. Tùy thuộc vào cài đặt của cờ, kết quả có thể chứa một tên miền đủ điều kiện hoặc đại diện địa chỉ số trong máy chủ. Tương tự, cổng có thể chứa tên cổng chuỗi hoặc số cổng dạng số

Đối với địa chỉ IPv6,

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
50 được thêm vào phần máy chủ lưu trữ nếu sockaddr chứa scope_id có ý nghĩa. Thông thường điều này xảy ra đối với các địa chỉ multicast

Để biết thêm thông tin về cờ, bạn có thể tham khảo getnameinfo[3]

Tăng sự kiện kiểm tra

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
78 với đối số
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
79.

Tính khả dụng . không phải WASI.

ổ cắm. getprotobyname[protocolname]

Dịch tên giao thức internet [ví dụ:

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
80] thành một hằng số phù hợp để chuyển làm đối số thứ ba [tùy chọn] cho hàm
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
8. Điều này thường chỉ cần thiết cho các ổ cắm được mở ở chế độ “thô” [
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
80];

Tính khả dụng . không phải WASI.

ổ cắm. getservbyname[tên dịch vụ[ , protocolname]]

Dịch tên dịch vụ internet và tên giao thức thành số cổng cho dịch vụ đó. Tên giao thức tùy chọn, nếu được cung cấp, phải là

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
83 hoặc
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
84, nếu không, bất kỳ giao thức nào cũng sẽ khớp

Tăng sự kiện kiểm tra

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
85 với các đối số
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
86,
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
87.

Tính khả dụng . không phải WASI.

ổ cắm. getservbyport[cổng[ , protocolname]]

Dịch số cổng internet và tên giao thức thành tên dịch vụ cho dịch vụ đó. Tên giao thức tùy chọn, nếu được cung cấp, phải là

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
83 hoặc
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
84, nếu không, bất kỳ giao thức nào cũng sẽ khớp

Tăng sự kiện kiểm tra

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
90 với các đối số
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
48,
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
87.

Tính khả dụng . không phải WASI.

ổ cắm. ntohl[x]

Chuyển đổi số nguyên dương 32 bit từ mạng sang thứ tự byte lưu trữ. Trên các máy có thứ tự byte máy chủ giống với thứ tự byte mạng, đây là lệnh cấm;

ổ cắm. ntohs[x]

Chuyển đổi số nguyên dương 16 bit từ mạng sang thứ tự byte lưu trữ. Trên các máy có thứ tự byte máy chủ giống với thứ tự byte mạng, đây là lệnh cấm;

Đã thay đổi trong phiên bản 3. 10. Tăng

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
93 nếu x không vừa với số nguyên không dấu 16 bit.

ổ cắm. htonl[x]

Chuyển đổi số nguyên dương 32 bit từ máy chủ sang thứ tự byte mạng. Trên các máy có thứ tự byte máy chủ giống với thứ tự byte mạng, đây là lệnh cấm;

ổ cắm. htons[x]

Chuyển đổi số nguyên dương 16 bit từ máy chủ sang thứ tự byte mạng. Trên các máy có thứ tự byte máy chủ giống với thứ tự byte mạng, đây là lệnh cấm;

Đã thay đổi trong phiên bản 3. 10. Tăng

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
93 nếu x không vừa với số nguyên không dấu 16 bit.

ổ cắm. inet_aton[ip_string]

Chuyển đổi địa chỉ IPv4 từ định dạng chuỗi tứ giác chấm [ví dụ: '123. 45. 67. 89'] sang định dạng nhị phân được đóng gói 32 bit, dưới dạng đối tượng byte có độ dài bốn ký tự. Điều này rất hữu ích khi trò chuyện với một chương trình sử dụng thư viện C tiêu chuẩn và cần các đối tượng thuộc loại

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
95, là loại C cho tệp nhị phân được đóng gói 32 bit mà hàm này trả về

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
96 cũng chấp nhận các chuỗi có ít hơn ba dấu chấm;

Nếu chuỗi địa chỉ IPv4 được chuyển đến chức năng này không hợp lệ, thì

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
11 sẽ được nâng lên. Lưu ý rằng chính xác những gì hợp lệ phụ thuộc vào việc triển khai C cơ bản của
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
96

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
96 không hỗ trợ IPv6 và nên sử dụng
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
500 thay thế cho hỗ trợ ngăn xếp kép IPv4/v6

ổ cắm. inet_ntoa[packed_ip]

Chuyển đổi địa chỉ IPv4 được đóng gói 32 bit [a đối tượng giống như byte có độ dài bốn byte] thành biểu diễn chuỗi bốn dấu chấm tiêu chuẩn của nó . 45. 67. 89’]. Điều này hữu ích khi trò chuyện với một chương trình sử dụng thư viện C tiêu chuẩn và cần các đối tượng thuộc loại

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
95, là loại C cho dữ liệu nhị phân được đóng gói 32 bit mà hàm này lấy làm đối số.

Nếu chuỗi byte được truyền cho hàm này có độ dài không chính xác là 4 byte, thì

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
11 sẽ được nâng lên.
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
503 không hỗ trợ IPv6 và nên sử dụng
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
504 để hỗ trợ ngăn xếp kép IPv4/v6 thay thế

Changed in version 3. 5. Writable bytes-like object is now accepted.

ổ cắm. inet_pton[address_family , ip_string]

Chuyển đổi địa chỉ IP từ định dạng chuỗi dành riêng cho họ sang định dạng nhị phân được đóng gói.

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
500 rất hữu ích khi một thư viện hoặc giao thức mạng gọi một đối tượng thuộc loại
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
95 [tương tự như
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
96] hoặc
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
508

Các giá trị được hỗ trợ cho address_family hiện tại là

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
7 và
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
54. Nếu chuỗi địa chỉ IP ip_string không hợp lệ,
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
11 sẽ được nâng lên. Lưu ý rằng chính xác những gì hợp lệ phụ thuộc vào cả giá trị của address_family và triển khai cơ bản của
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
500

Tính khả dụng . Hệ điều hành Unix, Windows.

Đã thay đổi trong phiên bản 3. 4. Đã thêm hỗ trợ Windows

ổ cắm. inet_ntop[address_family , packed_ip]

Chuyển đổi địa chỉ IP được đóng gói [a đối tượng giống như byte của một số byte] thành biểu diễn chuỗi tiêu chuẩn, dành riêng cho họ [ .

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
504 hữu ích khi một thư viện hoặc giao thức mạng trả về một đối tượng thuộc loại
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
95 [tương tự như
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
503] hoặc
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
508.

Các giá trị được hỗ trợ cho address_family hiện tại là

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
7 và
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
54. Nếu đối tượng bytepack_ip không có độ dài chính xác cho họ địa chỉ đã chỉ định, thì
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
19 sẽ được nâng lên.
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
11 được đưa ra do lỗi từ cuộc gọi đến
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
504

Tính khả dụng . Hệ điều hành Unix, Windows.

Đã thay đổi trong phiên bản 3. 4. Đã thêm hỗ trợ Windows

Changed in version 3. 5. Writable bytes-like object is now accepted.

ổ cắm. CMSG_LEN[độ dài]

Trả về tổng độ dài, không có phần đệm ở cuối, của một mục dữ liệu phụ trợ với dữ liệu được liên kết có độ dài nhất định. This value can often be used as the buffer size for

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
524 to receive a single item of ancillary data, but RFC 3542 requires portable applications to use
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
525 and thus include space for padding, even when the item will be the last in the buffer. Tăng
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
93 nếu chiều dài nằm ngoài phạm vi giá trị cho phép

Tính khả dụng . Unix, không phải Emscripten, không phải WASI.

Hầu hết các nền tảng Unix

Mới trong phiên bản 3. 3

ổ cắm. CMSG_SPACE[độ dài]

Return the buffer size needed for

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
524 to receive an ancillary data item with associated data of the given length, along with any trailing padding. Không gian bộ đệm cần thiết để nhận nhiều mục là tổng của các giá trị
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
525 cho độ dài dữ liệu được liên kết của chúng. Tăng
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
93 nếu chiều dài nằm ngoài phạm vi giá trị cho phép

Note that some systems might support ancillary data without providing this function. Cũng lưu ý rằng việc đặt kích thước bộ đệm bằng cách sử dụng kết quả của chức năng này có thể không giới hạn chính xác lượng dữ liệu phụ trợ có thể nhận được, vì dữ liệu bổ sung có thể vừa với vùng đệm

Tính khả dụng . Unix, không phải Emscripten, không phải WASI.

hầu hết các nền tảng Unix

Mới trong phiên bản 3. 3

ổ cắm. getdefaulttimeout[]

Trả lại thời gian chờ mặc định tính bằng giây [float] cho các đối tượng ổ cắm mới. A value of

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
31 indicates that new socket objects have no timeout. Khi mô-đun ổ cắm được nhập lần đầu tiên, giá trị mặc định là
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
31

ổ cắm. setdefaulttimeout[thời gian chờ]

Đặt thời gian chờ mặc định tính bằng giây [float] cho các đối tượng ổ cắm mới. Khi mô-đun ổ cắm được nhập lần đầu tiên, giá trị mặc định là

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
31. See
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
13 for possible values and their respective meanings

socket. sethostname[tên]

Set the machine’s hostname to name. Điều này sẽ tăng

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
11 nếu bạn không có đủ quyền

Tăng sự kiện kiểm tra

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
535 với đối số
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
536.

Tính khả dụng . Unix.

Mới trong phiên bản 3. 3

ổ cắm. if_nameindex[]

Trả về danh sách các bộ thông tin giao diện mạng [chỉ số int, chuỗi tên].

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
11 nếu cuộc gọi hệ thống không thành công

Tính khả dụng . Unix, Windows, không phải Emscripten, không phải WASI.

Mới trong phiên bản 3. 3

Đã thay đổi trong phiên bản 3. 8. Hỗ trợ Windows đã được thêm vào.

Note

Trên các giao diện mạng Windows có các tên khác nhau trong các ngữ cảnh khác nhau [tất cả các tên đều là ví dụ]

  • UUID.

    import socket
    
    addr = ["", 8080]  # all interfaces, port 8080
    if socket.has_dualstack_ipv6[]:
        s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
    else:
        s = socket.create_server[addr]
    
    538

  • name.

    import socket
    
    addr = ["", 8080]  # all interfaces, port 8080
    if socket.has_dualstack_ipv6[]:
        s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
    else:
        s = socket.create_server[addr]
    
    539

  • tên thân thiện.

    import socket
    
    addr = ["", 8080]  # all interfaces, port 8080
    if socket.has_dualstack_ipv6[]:
        s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
    else:
        s = socket.create_server[addr]
    
    540

  • sự mô tả.

    import socket
    
    addr = ["", 8080]  # all interfaces, port 8080
    if socket.has_dualstack_ipv6[]:
        s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
    else:
        s = socket.create_server[addr]
    
    541

Hàm này trả về tên của biểu mẫu thứ hai từ danh sách,

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
539 trong trường hợp ví dụ này

ổ cắm. if_nametoindex[if_name]

Trả về số chỉ mục giao diện mạng tương ứng với tên giao diện.

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
11 nếu không tồn tại giao diện với tên đã cho

Tính khả dụng . Unix, Windows, không phải Emscripten, không phải WASI.

Mới trong phiên bản 3. 3

Đã thay đổi trong phiên bản 3. 8. Hỗ trợ Windows đã được thêm vào.

See also

"Tên giao diện" là một tên như được ghi lại trong

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
544

ổ cắm. if_indextoname[if_index]

Trả về tên giao diện mạng tương ứng với số chỉ mục giao diện.

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
11 nếu không tồn tại giao diện với chỉ mục đã cho

Tính khả dụng . Unix, Windows, không phải Emscripten, không phải WASI.

Mới trong phiên bản 3. 3

Đã thay đổi trong phiên bản 3. 8. Hỗ trợ Windows đã được thêm vào.

See also

"Tên giao diện" là một tên như được ghi lại trong

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
544

socket. send_fds[sock , buffers , fds[ , flags[ , address]]]

Send the list of file descriptors fds over an

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
3 socket sock. Tham số fds là một chuỗi các bộ mô tả tệp. Tham khảo
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
548 để biết tài liệu về các tham số này

Tính khả dụng . Unix, Windows, không phải Emscripten, không phải WASI.

Nền tảng Unix hỗ trợ cơ chế

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
548 và
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
550

New in version 3. 9

ổ cắm. recv_fds[sock , bufsize , maxfds[ , flags]]

Receive up to maxfds file descriptors from an

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
3 socket sock. Return
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
552. Tham khảo
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
524 để biết tài liệu về các tham số này

Tính khả dụng . Unix, Windows, không phải Emscripten, không phải WASI.

Nền tảng Unix hỗ trợ cơ chế

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
548 và
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
550

New in version 3. 9

Note

Bất kỳ số nguyên bị cắt nào ở cuối danh sách bộ mô tả tệp

Socket Objects¶

Các đối tượng ổ cắm có các phương thức sau. Except for

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
556, these correspond to Unix system calls applicable to sockets

Changed in version 3. 2. Support for the context manager protocol was added. Exiting the context manager is equivalent to calling

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
557.

socket. accept[]

Chấp nhận kết nối. Ổ cắm phải được liên kết với một địa chỉ và lắng nghe các kết nối. Giá trị trả về là một cặp

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
558 trong đó conn là một đối tượng ổ cắm mới có thể sử dụng để gửi và nhận dữ liệu trên kết nối và địa chỉ là địa chỉ được liên kết với ổ cắm ở đầu kia của kết nối

Ổ cắm mới được tạo là không thể kế thừa .

Changed in version 3. 4. Ổ cắm hiện không thể kế thừa.

Changed in version 3. 5. Nếu lệnh gọi hệ thống bị gián đoạn và trình xử lý tín hiệu không đưa ra ngoại lệ, thì phương pháp hiện sẽ thử lại lệnh gọi hệ thống thay vì đưa ra ngoại lệ

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
559 [xem PEP 475 để biết lý do].

ổ cắm. ràng buộc[địa chỉ]

Liên kết ổ cắm với địa chỉ. Ổ cắm phải chưa bị ràng buộc. [Định dạng của địa chỉ phụ thuộc vào họ địa chỉ — xem ở trên. ]

Tăng sự kiện kiểm tra

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
560 với các đối số
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
91,
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
562.

Tính khả dụng . không phải WASI.

socket. đóng[]

Mark the socket closed. Tài nguyên hệ thống cơ bản [e. g. a file descriptor] is also closed when all file objects from

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
556 are closed. Once that happens, all future operations on the socket object will fail. The remote end will receive no more data [after queued data is flushed]

Các ổ cắm tự động đóng khi chúng được thu gom rác, nhưng nên ____1557 chúng một cách rõ ràng hoặc sử dụng câu lệnh _____1565 xung quanh chúng

Đã thay đổi trong phiên bản 3. 6. ______111 hiện được nâng lên nếu xảy ra lỗi khi thực hiện lệnh gọi

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
557 cơ bản.

Note

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
557 giải phóng tài nguyên được liên kết với kết nối nhưng không nhất thiết phải đóng kết nối ngay lập tức. Nếu bạn muốn đóng kết nối kịp thời, hãy gọi cho
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
569 trước
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
557

ổ cắm. connect[address]

Connect to a remote socket at address. [The format of address depends on the address family — see above. ]

Nếu kết nối bị gián đoạn bởi một tín hiệu, phương thức sẽ đợi cho đến khi kết nối hoàn tất hoặc tăng

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
30 khi hết thời gian chờ, nếu trình xử lý tín hiệu không đưa ra ngoại lệ và ổ cắm đang chặn hoặc hết thời gian chờ. Đối với các ổ cắm không chặn, phương pháp này sẽ đưa ra một ngoại lệ
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
559 nếu kết nối bị gián đoạn bởi một tín hiệu [hoặc ngoại lệ do bộ xử lý tín hiệu đưa ra]

Tăng sự kiện kiểm tra

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
573 với các đối số
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
91,
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
562.

Đã thay đổi trong phiên bản 3. 5. Phương thức hiện đợi cho đến khi kết nối hoàn tất thay vì đưa ra ngoại lệ

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
559 nếu kết nối bị gián đoạn bởi tín hiệu, trình xử lý tín hiệu không đưa ra ngoại lệ và ổ cắm đang bị chặn hoặc hết thời gian chờ .

Tính khả dụng . không phải WASI.

ổ cắm. connect_ex[địa chỉ]

Giống như

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
577, nhưng trả về một chỉ báo lỗi thay vì đưa ra một ngoại lệ đối với các lỗi được trả về bởi lệnh gọi
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
578 cấp độ C [các sự cố khác, chẳng hạn như “không tìm thấy máy chủ”, vẫn có thể đưa ra các ngoại lệ]. Chỉ báo lỗi là
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
17 nếu thao tác thành công, nếu không thì giá trị của biến
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
580. This is useful to support, for example, asynchronous connects

Tăng sự kiện kiểm tra

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
573 với các đối số
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
91,
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
562.

Tính khả dụng . không phải WASI.

socket. tách[]

Đặt đối tượng ổ cắm vào trạng thái đóng mà không thực sự đóng bộ mô tả tệp bên dưới. The file descriptor is returned, and can be reused for other purposes

Mới trong phiên bản 3. 2

ổ cắm. dup[]

Nhân đôi ổ cắm

Ổ cắm mới được tạo là không thể kế thừa .

Changed in version 3. 4. Ổ cắm hiện không thể kế thừa.

Tính khả dụng . không phải WASI.

ổ cắm. fileno[]

Trả về bộ mô tả tệp của ổ cắm [một số nguyên nhỏ] hoặc -1 nếu không thành công. Điều này hữu ích với

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
584

Trong Windows, không thể sử dụng số nguyên nhỏ được phương thức này trả về khi có thể sử dụng bộ mô tả tệp [chẳng hạn như

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
585]. Unix does not have this limitation

ổ cắm. get_inheritable[]

Get the inheritable flag of the socket’s file descriptor or socket’s handle.

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
11 nếu ổ cắm có thể được kế thừa trong các tiến trình con,
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
587 nếu không thể.

Mới trong phiên bản 3. 4

ổ cắm. getpeername[]

Trả lại địa chỉ từ xa mà ổ cắm được kết nối. Chẳng hạn, điều này rất hữu ích để tìm ra số cổng của ổ cắm IPv4/v6 từ xa. [The format of the address returned depends on the address family — see above. ] On some systems this function is not supported

ổ cắm. getsockname[]

Trả về địa chỉ riêng của ổ cắm. This is useful to find out the port number of an IPv4/v6 socket, for instance. [Định dạng của địa chỉ được trả về tùy thuộc vào họ địa chỉ — xem ở trên. ]

ổ cắm. getsockopt[cấp độ , optname[, buflen]]

Return the value of the given socket option [see the Unix man page getsockopt[2]]. The needed symbolic constants [

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
588 etc. ] được xác định trong mô-đun này. Nếu không có buflen, một tùy chọn số nguyên được sử dụng và giá trị số nguyên của nó được trả về bởi hàm. Nếu có buflen, nó chỉ định độ dài tối đa của bộ đệm được sử dụng để nhận tùy chọn và bộ đệm này được trả về dưới dạng đối tượng byte. Việc giải mã nội dung của bộ đệm tùy thuộc vào người gọi [xem mô-đun tích hợp tùy chọn
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
589 để biết cách giải mã các cấu trúc C được mã hóa dưới dạng chuỗi byte]

Tính khả dụng . không phải WASI.

socket. bị chặn[]

Return

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
11 if socket is in blocking mode,
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
587 if in non-blocking

Điều này tương đương với việc kiểm tra

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
592

New in version 3. 7

ổ cắm. thời gian chờ[]

Return the timeout in seconds [float] associated with socket operations, or

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
31 if no timeout is set. This reflects the last call to
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
12 or
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
13

ổ cắm. ioctl[control , option] ¶Platform

các cửa sổ

Phương thức

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
63 là một giao diện giới hạn đối với giao diện hệ thống WSAIoctl. Vui lòng tham khảo tài liệu Win32 để biết thêm thông tin

Trên các nền tảng khác, có thể sử dụng các hàm chung

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
597 và
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
598;

Hiện tại chỉ có các mã kiểm soát sau được hỗ trợ.

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
599,
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
500 và
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
64

Đã thay đổi trong phiên bản 3. 6. ______164 đã được thêm vào.

ổ cắm. lắng nghe[[tồn đọng]]

Enable a server to accept connections. Nếu chỉ định tồn đọng thì ít nhất phải bằng 0 [nếu thấp hơn thì đặt bằng 0]; . If not specified, a default reasonable value is chosen

Tính khả dụng . không phải WASI.

Đã thay đổi trong phiên bản 3. 5. The backlog parameter is now optional.

ổ cắm. makefile[mode='r' , buffering=None , * , encoding=None , errors=None , newline=None]

Trả về đối tượng tệp được liên kết với ổ cắm. The exact returned type depends on the arguments given to

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
556. Các đối số này được diễn giải theo cách tương tự như bởi hàm
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
504 tích hợp, ngoại trừ các giá trị chế độ được hỗ trợ duy nhất là
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
505 [mặc định],
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
506 và
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
507.

Ổ cắm phải ở chế độ chặn;

Việc đóng đối tượng tệp được trả về bởi

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
556 sẽ không đóng ổ cắm ban đầu trừ khi tất cả các đối tượng tệp khác đã được đóng và
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
89 đã được gọi trên đối tượng ổ cắm

Note

On Windows, the file-like object created by

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
556 cannot be used where a file object with a file descriptor is expected, such as the stream arguments of
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
511

ổ cắm. recv[bufsize[ , flags]]

Receive data from the socket. Giá trị trả về là một đối tượng byte đại diện cho dữ liệu nhận được. The maximum amount of data to be received at once is specified by bufsize. See the Unix manual page recv[2] for the meaning of the optional argument flags; it defaults to zero

Note

Để phù hợp nhất với thực tế phần cứng và mạng, giá trị của bufsize phải là lũy thừa tương đối nhỏ của 2, ví dụ: 4096

Changed in version 3. 5. Nếu lệnh gọi hệ thống bị gián đoạn và trình xử lý tín hiệu không đưa ra ngoại lệ, thì phương pháp hiện sẽ thử lại lệnh gọi hệ thống thay vì đưa ra ngoại lệ

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
559 [xem PEP 475 để biết lý do].

socket. recvfrom[bufsize[ , flags]]

Nhận dữ liệu từ ổ cắm. Giá trị trả về là một cặp

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
513 trong đó byte là đối tượng byte đại diện cho dữ liệu nhận được và địa chỉ là địa chỉ của ổ cắm gửi dữ liệu. See the Unix manual page recv[2] for the meaning of the optional argument flags; it defaults to zero. [Định dạng của địa chỉ phụ thuộc vào họ địa chỉ — xem ở trên. ]

Changed in version 3. 5. Nếu lệnh gọi hệ thống bị gián đoạn và trình xử lý tín hiệu không đưa ra ngoại lệ, thì phương pháp hiện sẽ thử lại lệnh gọi hệ thống thay vì đưa ra ngoại lệ

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
559 [xem PEP 475 để biết lý do].

Changed in version 3. 7. Đối với địa chỉ IPv6 phát đa hướng, mục đầu tiên của địa chỉ không chứa phần

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
50 nữa. In order to get full IPv6 address use
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
25.

ổ cắm. recvmsg[bufsize[ , ancbufsize[, flags]]]

Nhận dữ liệu bình thường [tối đa byte kích thước] và dữ liệu phụ trợ từ ổ cắm. Đối số ancbufsize đặt kích thước tính bằng byte của bộ đệm bên trong được sử dụng để nhận dữ liệu phụ trợ; . Kích thước bộ đệm phù hợp cho dữ liệu phụ trợ có thể được tính bằng cách sử dụng

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
525 hoặc
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
518 và các mục không vừa với bộ đệm có thể bị cắt bớt hoặc loại bỏ. Đối số flags mặc định là 0 và có cùng ý nghĩa như đối với
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
519

Giá trị trả về là 4-tuple.

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
520. Mục dữ liệu là một đối tượng
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
61 chứa dữ liệu không phụ trợ nhận được. Mục ancdata là danh sách không hoặc nhiều bộ dữ liệu
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
522 đại diện cho dữ liệu phụ trợ [thông báo điều khiển] nhận được. cmsg_level and cmsg_type are integers specifying the protocol level and protocol-specific type respectively, and cmsg_data is a
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
61 object holding the associated data. The msg_flags item is the bitwise OR of various flags indicating conditions on the received message; see your system documentation for details. Nếu ổ cắm nhận không được kết nối, địa chỉ là địa chỉ của ổ cắm gửi, nếu có;

Trên một số hệ thống, có thể sử dụng

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
548 và
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
524 để chuyển bộ mô tả tệp giữa các quy trình qua ổ cắm
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
3. Khi cơ sở này được sử dụng [nó thường bị giới hạn ở ổ cắm
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
42],
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
524 sẽ trả về, trong dữ liệu phụ trợ của nó, các mục có dạng
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
529, trong đó fds là một đối tượng
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
61 đại diện cho bộ mô tả tệp mới dưới dạng một mảng nhị phân của C < . Nếu
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
524 đưa ra một ngoại lệ sau khi lệnh gọi hệ thống trả về, trước tiên, nó sẽ cố gắng đóng bất kỳ bộ mô tả tệp nào nhận được qua cơ chế này.
int type. If
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
524 raises an exception after the system call returns, it will first attempt to close any file descriptors received via this mechanism.

Some systems do not indicate the truncated length of ancillary data items which have been only partially received. Nếu một mục dường như mở rộng ra ngoài phần cuối của bộ đệm,

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
524 sẽ phát hành một
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
533 và sẽ trả lại phần của nó nằm trong bộ đệm với điều kiện là nó không bị cắt bớt trước khi bắt đầu dữ liệu liên quan của nó

Trên các hệ thống hỗ trợ cơ chế

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
550, chức năng sau sẽ nhận tối đa bộ mô tả tệp maxfds, trả về dữ liệu thông báo và danh sách chứa bộ mô tả [trong khi bỏ qua các điều kiện không mong muốn, chẳng hạn như nhận được thông báo điều khiển không liên quan]. Xem thêm
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
548

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
5

Tính khả dụng . Unix.

Hầu hết các nền tảng Unix

Mới trong phiên bản 3. 3

Changed in version 3. 5. Nếu lệnh gọi hệ thống bị gián đoạn và trình xử lý tín hiệu không đưa ra ngoại lệ, thì phương pháp hiện sẽ thử lại lệnh gọi hệ thống thay vì đưa ra ngoại lệ

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
559 [xem PEP 475 để biết lý do].

socket. recvmsg_into[bộ đệm[ , ancbufsize[, flags]]]

Receive normal data and ancillary data from the socket, behaving as

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
524 would, but scatter the non-ancillary data into a series of buffers instead of returning a new bytes object. Đối số bộ đệm phải là đối tượng có thể lặp lại của các đối tượng xuất bộ đệm có thể ghi [e. g.
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
538 đối tượng]; . The operating system may set a limit [
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
539 value
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
540] on the number of buffers that can be used. The ancbufsize and flags arguments have the same meaning as for
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
524

Giá trị trả về là 4-tuple.

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
542, trong đó nbytes là tổng số byte dữ liệu không phụ trợ được ghi vào bộ đệm và ancdata, msg_flags và địa chỉ giống như đối với
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
524

Example

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
5

Tính khả dụng . Unix.

Hầu hết các nền tảng Unix

Mới trong phiên bản 3. 3

ổ cắm. recvfrom_into[buffer[ , nbytes[ , flags]]]

Receive data from the socket, writing it into buffer instead of creating a new bytestring. The return value is a pair

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
544 where nbytes is the number of bytes received and address is the address of the socket sending the data. Xem trang thủ công Unix recv[2] để biết ý nghĩa của các cờ đối số tùy chọn; . [Định dạng của địa chỉ phụ thuộc vào họ địa chỉ — xem ở trên. ]

ổ cắm. recv_into[bộ đệm[ , nbytes[, flags]]]

Nhận tối đa nbyte byte từ ổ cắm, lưu trữ dữ liệu vào bộ đệm thay vì tạo chuỗi byte mới. If nbytes is not specified [or 0], receive up to the size available in the given buffer. Returns the number of bytes received. Xem trang thủ công Unix recv[2] để biết ý nghĩa của các cờ đối số tùy chọn;

ổ cắm. gửi[byte[ , flags]]

Send data to the socket. Ổ cắm phải được kết nối với ổ cắm từ xa. Đối số cờ tùy chọn có cùng ý nghĩa như đối với

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
519 ở trên. Trả về số byte đã gửi. Các ứng dụng có trách nhiệm kiểm tra xem tất cả dữ liệu đã được gửi chưa; . For further information on this topic, consult the Socket Programming HOWTO .

Changed in version 3. 5. Nếu lệnh gọi hệ thống bị gián đoạn và trình xử lý tín hiệu không đưa ra ngoại lệ, thì phương pháp hiện sẽ thử lại lệnh gọi hệ thống thay vì đưa ra ngoại lệ

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
559 [xem PEP 475 để biết lý do].

ổ cắm. gửi đi[byte[ , flags]]

Gửi dữ liệu đến ổ cắm. Ổ cắm phải được kết nối với ổ cắm từ xa. Đối số cờ tùy chọn có cùng ý nghĩa như đối với

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
519 ở trên. Unlike
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
548, this method continues to send data from bytes until either all data has been sent or an error occurs.
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
31 được trả lại khi thành công. Khi có lỗi, một ngoại lệ được đưa ra và không có cách nào để xác định lượng dữ liệu, nếu có, đã được gửi thành công

Đã thay đổi trong phiên bản 3. 5. Thời gian chờ của ổ cắm không còn được đặt lại mỗi khi dữ liệu được gửi thành công. Thời gian chờ của ổ cắm hiện là tổng thời lượng tối đa để gửi tất cả dữ liệu.

Changed in version 3. 5. Nếu lệnh gọi hệ thống bị gián đoạn và trình xử lý tín hiệu không đưa ra ngoại lệ, thì phương pháp hiện sẽ thử lại lệnh gọi hệ thống thay vì đưa ra ngoại lệ

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
559 [xem PEP 475 để biết lý do].

socket. sendto[bytes , address]socket. gửi tới[byte , cờ, address]

Send data to the socket. Không nên kết nối ổ cắm với ổ cắm từ xa vì ổ cắm đích được chỉ định theo địa chỉ. The optional flags argument has the same meaning as for

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
519 above. Trả về số byte đã gửi. [Định dạng của địa chỉ phụ thuộc vào họ địa chỉ — xem ở trên. ]

Tăng sự kiện kiểm tra

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
552 với các đối số
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
91,
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
562.

Changed in version 3. 5. Nếu lệnh gọi hệ thống bị gián đoạn và trình xử lý tín hiệu không đưa ra ngoại lệ, thì phương pháp hiện sẽ thử lại lệnh gọi hệ thống thay vì đưa ra ngoại lệ

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
559 [xem PEP 475 để biết lý do].

ổ cắm. sendmsg[bộ đệm[ , ancdata[, flags[, address]]]]

Gửi dữ liệu thông thường và phụ trợ đến ổ cắm, thu thập dữ liệu không phụ trợ từ một loạt bộ đệm và nối dữ liệu đó thành một thông báo duy nhất. Đối số bộ đệm chỉ định dữ liệu không phụ trợ dưới dạng có thể lặp lại đối tượng giống như byte [e. g.

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
61 đối tượng]; . Đối số ancdata chỉ định dữ liệu phụ trợ [thông báo điều khiển] dưới dạng có thể lặp lại từ 0 hoặc nhiều bộ dữ liệu
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
522, trong đó cmsg_level và cmsg_type lần lượt là các số nguyên chỉ định cấp độ giao thức và loại dành riêng cho giao thức và cmsg_data là một đối tượng dạng byte chứa dữ liệu được liên kết. Lưu ý rằng một số hệ thống [cụ thể là hệ thống không có
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
525] có thể chỉ hỗ trợ gửi một thông báo điều khiển cho mỗi cuộc gọi. Đối số flags mặc định là 0 và có cùng ý nghĩa như đối với
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
548. Nếu địa chỉ được cung cấp chứ không phải
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
31, nó sẽ đặt địa chỉ đích cho tin nhắn. Giá trị trả về là số byte dữ liệu không phụ trợ được gửi.

Hàm sau gửi danh sách các bộ mô tả tệp fds qua ổ cắm

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
3, trên các hệ thống hỗ trợ cơ chế
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
550. Xem thêm
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
524

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
5

Tính khả dụng . Unix, không phải WASI.

Hầu hết các nền tảng Unix

Raises an auditing event

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
566 with arguments
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
91,
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
562.

Mới trong phiên bản 3. 3

Changed in version 3. 5. Nếu lệnh gọi hệ thống bị gián đoạn và trình xử lý tín hiệu không đưa ra ngoại lệ, thì phương pháp hiện sẽ thử lại lệnh gọi hệ thống thay vì đưa ra ngoại lệ

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
559 [xem PEP 475 để biết lý do].

ổ cắm. sendmsg_afalg[[msg , ]* , op[ , iv[ , assoclen[ , flags]]]]

Specialized version of

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
548 for
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
63 socket. Đặt cờ và độ dài dữ liệu liên quan đến chế độ, IV, AEAD cho ổ cắm
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
63

Availability . Linux >= 2. 6. 38.

New in version 3. 6

ổ cắm. sendfile[file , offset=0, count=None]

Gửi tệp cho đến khi đạt được EOF bằng cách sử dụng hiệu suất cao

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
573 và trả về tổng số byte đã được gửi. file must be a regular file object opened in binary mode. If
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
573 is not available [e. g. Windows] hoặc tệp không phải là tệp thông thường
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
548 sẽ được sử dụng thay thế. offset cho biết bắt đầu đọc tệp từ đâu. Nếu được chỉ định, số đếm là tổng số byte cần truyền thay vì gửi tệp cho đến khi đạt đến EOF. File position is updated on return or also in case of error in which case
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
576 can be used to figure out the number of bytes which were sent. Ổ cắm phải là loại
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
42. Non-blocking sockets are not supported

Mới trong phiên bản 3. 5

ổ cắm. set_inheritable[có thể kế thừa]

Set the inheritable flag of the socket’s file descriptor or socket’s handle.

Mới trong phiên bản 3. 4

ổ cắm. thiết lập chặn[cờ]

Set blocking or non-blocking mode of the socket. nếu cờ là sai, ổ cắm được đặt thành không chặn, nếu không thì chế độ chặn

Phương pháp này là cách viết tắt của một số cuộc gọi

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
13 nhất định

  • import socket
    
    addr = ["", 8080]  # all interfaces, port 8080
    if socket.has_dualstack_ipv6[]:
        s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
    else:
        s = socket.create_server[addr]
    
    579 is equivalent to
    import socket
    
    addr = ["", 8080]  # all interfaces, port 8080
    if socket.has_dualstack_ipv6[]:
        s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
    else:
        s = socket.create_server[addr]
    
    580

  • import socket
    
    addr = ["", 8080]  # all interfaces, port 8080
    if socket.has_dualstack_ipv6[]:
        s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
    else:
        s = socket.create_server[addr]
    
    581 tương đương với
    import socket
    
    addr = ["", 8080]  # all interfaces, port 8080
    if socket.has_dualstack_ipv6[]:
        s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
    else:
        s = socket.create_server[addr]
    
    582

Đã thay đổi trong phiên bản 3. 7. Phương thức không còn áp dụng cờ

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
95 trên
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
97.

ổ cắm. thời gian giải quyết[giá trị]

Đặt thời gian chờ khi chặn hoạt động của ổ cắm. Đối số giá trị có thể là một số dấu phẩy động không âm biểu thị giây hoặc

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
31. If a non-zero value is given, subsequent socket operations will raise a
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
586 exception if the timeout period value has elapsed before the operation has completed. Nếu không được đưa ra, ổ cắm được đặt ở chế độ không chặn. Nếu cung cấp
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
31, ổ cắm được đặt ở chế độ chặn

Để biết thêm thông tin, vui lòng tham khảo ghi chú về thời gian chờ của ổ cắm .

Đã thay đổi trong phiên bản 3. 7. Phương thức không còn bật cờ

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
95 trên
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
97.

ổ cắm. setsockopt[cấp độ , optname . , value: int]ổ cắm. setsockopt[cấp độ , optname . , value: bộ đệm]ổ cắm. setsockopt[cấp độ , optname . , None, optlen: int]

Set the value of the given socket option [see the Unix manual page setsockopt[2]]. The needed symbolic constants are defined in the

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
5 module [
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
588 etc. ]. The value can be an integer,
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
31 or a bytes-like object representing a buffer. In the later case it is up to the caller to ensure that the bytestring contains the proper bits [see the optional built-in module
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
589 for a way to encode C structures as bytestrings]. When value is set to
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
31, optlen argument is required. It’s equivalent to call
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
44 C function with
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
596 and
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
597.

Changed in version 3. 5. Writable bytes-like object is now accepted.

Changed in version 3. 6. setsockopt[level, optname, None, optlen. int] form added.

Tính khả dụng . không phải WASI.

socket. shutdown[how]

Shut down one or both halves of the connection. If how is

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
598, further receives are disallowed. If how is
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
599, further sends are disallowed. If how is
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
500, further sends and receives are disallowed

Tính khả dụng . không phải WASI.

socket. share[process_id]

Duplicate a socket and prepare it for sharing with a target process. The target process must be provided with process_id. The resulting bytes object can then be passed to the target process using some form of interprocess communication and the socket can be recreated there using

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
501. Once this method has been called, it is safe to close the socket since the operating system has already duplicated it for the target process

Tính khả dụng . các cửa sổ.

Mới trong phiên bản 3. 3

Note that there are no methods

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
9 or
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
0; use
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
519 and
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
548 without flags argument instead

Socket objects also have these [read-only] attributes that correspond to the values given to the

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
5 constructor

socket. family

The socket family

socket. type

The socket type

socket. proto

The socket protocol

Notes on socket timeouts¶

A socket object can be in one of three modes. blocking, non-blocking, or timeout. Sockets are by default always created in blocking mode, but this can be changed by calling

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
33

  • In blocking mode, operations block until complete or the system returns an error [such as connection timed out]

  • In non-blocking mode, operations fail [with an error that is unfortunately system-dependent] if they cannot be completed immediately. functions from the

    import socket
    
    addr = ["", 8080]  # all interfaces, port 8080
    if socket.has_dualstack_ipv6[]:
        s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
    else:
        s = socket.create_server[addr]
    
    508 can be used to know when and whether a socket is available for reading or writing

  • In timeout mode, operations fail if they cannot be completed within the timeout specified for the socket [they raise a

    import socket
    
    addr = ["", 8080]  # all interfaces, port 8080
    if socket.has_dualstack_ipv6[]:
        s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
    else:
        s = socket.create_server[addr]
    
    586 exception] or if the system returns an error

Note

At the operating system level, sockets in timeout mode are internally set in non-blocking mode. Ngoài ra, các chế độ chặn và thời gian chờ được chia sẻ giữa các bộ mô tả tệp và các đối tượng ổ cắm đề cập đến cùng một điểm cuối mạng. Chi tiết triển khai này có thể có những hậu quả rõ ràng nếu e. g. you decide to use the

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
24 of a socket

Timeouts and the
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
511 method¶

The

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
578 operation is also subject to the timeout setting, and in general it is recommended to call
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
13 before calling
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
578 or pass a timeout parameter to
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
515. However, the system network stack may also return a connection timeout error of its own regardless of any Python socket timeout setting

Timeouts and the
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
516 method¶

If

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
09 is not
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
31, sockets returned by the
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
519 method inherit that timeout. Otherwise, the behaviour depends on settings of the listening socket

  • if the listening socket is in blocking mode or in timeout mode, the socket returned by

    import socket
    
    addr = ["", 8080]  # all interfaces, port 8080
    if socket.has_dualstack_ipv6[]:
        s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
    else:
        s = socket.create_server[addr]
    
    519 is in blocking mode;

  • if the listening socket is in non-blocking mode, whether the socket returned by

    import socket
    
    addr = ["", 8080]  # all interfaces, port 8080
    if socket.has_dualstack_ipv6[]:
        s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
    else:
        s = socket.create_server[addr]
    
    519 is in blocking or non-blocking mode is operating system-dependent. If you want to ensure cross-platform behaviour, it is recommended you manually override this setting

Example¶

Here are four minimal example programs using the TCP/IP protocol. a server that echoes all data that it receives back [servicing only one client], and a client using it. Note that a server must perform the sequence

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
8,
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
523,
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
524,
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
519 [possibly repeating the
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
519 to service more than one client], while a client only needs the sequence
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
8,
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
578. Also note that the server does not
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
529/
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
519 on the socket it is listening on but on the new socket returned by
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
519

The first two examples support IPv4 only

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
5

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
5

The next two examples are identical to the above two, but support both IPv4 and IPv6. The server side will listen to the first address family available [it should listen to both instead]. On most of IPv6-ready systems, IPv6 will take precedence and the server may not accept IPv4 traffic. The client side will try to connect to the all addresses returned as a result of the name resolution, and sends traffic to the first one connected successfully

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
6

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
5

The next example shows how to write a very simple network sniffer with raw sockets on Windows. The example requires administrator privileges to modify the interface

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
0

The next example shows how to use the socket interface to communicate to a CAN network using the raw socket protocol. To use CAN with the broadcast manager protocol instead, open a socket with

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
1

After binding [

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
83] or connecting [
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
84] the socket, you can use the
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
534, and the
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
535 operations [and their counterparts] on the socket object as usual

This last example might require special privileges

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
2

Running an example several times with too small delay between executions, could lead to this error

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
3

This is because the previous execution has left the socket in a

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
536 state, and can’t be immediately reused

There is a

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
5 flag to set, in order to prevent this,
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
538

import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
4

the

>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP]
[[socket.AF_INET6, socket.SOCK_STREAM,
 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]],
 [socket.AF_INET, socket.SOCK_STREAM,
 6, '', ['93.184.216.34', 80]]]
22 flag tells the kernel to reuse a local socket in
import socket

addr = ["", 8080]  # all interfaces, port 8080
if socket.has_dualstack_ipv6[]:
    s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True]
else:
    s = socket.create_server[addr]
536 state, without waiting for its natural timeout to expire

See also

For an introduction to socket programming [in C], see the following papers

  • An Introductory 4. 3BSD Interprocess Communication Tutorial, by Stuart Sechrest

  • An Advanced 4. 3BSD Interprocess Communication Tutorial, by Samuel J. Leffler et al,

both in the UNIX Programmer’s Manual, Supplementary Documents 1 [sections PS1. 7 and PS1. 8]. The platform-specific reference material for the various socket-related system calls are also a valuable source of information on the details of socket semantics. For Unix, refer to the manual pages; for Windows, see the WinSock [or Winsock 2] specification. For IPv6-ready APIs, readers may want to refer to RFC 3493 titled Basic Socket Interface Extensions for IPv6

How does Python handle timeout errors?

In Python, use the stdin. readline[] and stdout. write[] instead of input and print . Ensure that the input value to test cases is passed in the expected format.

How does socket timeout work Python?

A new Python socket by default doesn't have a timeout. Its timeout defaults to None . Not setting the connection timeout parameter can result in blocking socket mode. In blocking mode, operations block until complete or the system returns an error.

Does Python close the socket automatically?

Python takes the automatic shutdown a step further, and says that when a socket is garbage collected, it will automatically do a close if it's needed .

How to fix timeout exception in selenium Python?

Giải pháp .
You can manually increase the wait time by hit-and-trial. If the problem persists for a longer period of time, there may be some other issue and you should continue onto the next solution
Bạn có thể thêm thời gian chờ một cách rõ ràng bằng cách sử dụng JavaScript Executor

Chủ Đề