> 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 integerFor 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 representsimport socket addr = ["", 8080] # all interfaces, port 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 stringimport socket addr = ["", 8080] # all interfaces, port 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 representsimport socket addr = ["", 8080] # all interfaces, port 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-tupleimport socket addr = ["", 8080] # all interfaces, port 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 theimport socket addr = ["", 8080] # all interfaces, port 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 andimport socket addr = ["", 8080] # all interfaces, port 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 inimport socket addr = ["", 8080] # all interfaces, port 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. Forimport socket addr = ["", 8080] # all interfaces, port 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 addressesChanged 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ặcimport socket addr = ["", 8080] # all interfaces, port 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 pairsimport socket addr = ["", 8080] # all interfaces, port 8080 if socket.has_dualstack_ipv6[]: s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True] else: s = socket.create_server[addr]
53Linux-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 isimport socket addr = ["", 8080] # all interfaces, port 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, whereaddr_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, orimport socket addr = ["", 8080] # all interfaces, port 8080 if socket.has_dualstack_ipv6[]: s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True] else: s = socket.create_server[addr]
58scope 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, andimport socket addr = ["", 8080] # all interfaces, port 8080 if socket.has_dualstack_ipv6[]: s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True] else: s = socket.create_server[addr]
51If 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 0If 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 numberIf 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 theimport socket addr = ["", 8080] # all interfaces, port 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 likeimport socket addr = ["", 8080] # all interfaces, port 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 nameimport socket addr = ["", 8080] # all interfaces, port 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 familyimport socket addr = ["", 8080] # all interfaces, port 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 tupleimport socket addr = ["", 8080] # all interfaces, port 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 tupleimport socket addr = ["", 8080] # all interfaces, port 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 theimport socket addr = ["", 8080] # all interfaces, port 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 theimport socket addr = ["", 8080] # all interfaces, port 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 usedMớ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 formatsimport socket addr = ["", 8080] # all interfaces, port 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 acceptsimport socket addr = ["", 8080] # all interfaces, port 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 whereimport socket addr = ["", 8080] # all interfaces, port 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 whereimport socket addr = ["", 8080] # all interfaces, port 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 acceptsimport socket addr = ["", 8080] # all interfaces, port 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 whereimport socket addr = ["", 8080] # all interfaces, port 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, wheretype 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]]]
68name 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]]]
52feat 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 integersAvailability . 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 whereifname - 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 addressimport socket addr = ["", 8080] # all interfaces, port 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 modeimport socket addr = ["", 8080] # all interfaces, port 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 aimport socket addr = ["", 8080] # all interfaces, port 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 integersAvailability . 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 andimport socket addr = ["", 8080] # all interfaces, port 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 casesimport socket addr = ["", 8080] # all interfaces, port 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 inimport socket addr = ["", 8080] # all interfaces, port 8080 if socket.has_dualstack_ipv6[]: s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True] else: s = socket.create_server[addr]
08Such 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 orimport socket addr = ["", 8080] # all interfaces, port 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 IPv6Availability . 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ắm. AF_UNIX ¶ ổ cắm. AF_INET ¶ ổ cắm. AF_INET6 ¶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]37import socket addr = ["", 8080] # all interfaces, port 8080 if socket.has_dualstack_ipv6[]: s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True] else: s = socket.create_server[addr]38Mới trong phiên bản 3. 4
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. SOMAXCONN ¶ MSG_*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_CAN ¶ SOL_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_BCM ¶ CAN_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_PACKET ¶ PACKET_*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_RDS ¶ RDS_*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_PATH ¶ RCVALL_*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_ALG ¶ ALG_*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_CID ¶ VMADDR*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 meaningssocket. 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]
538name.
import socket addr = ["", 8080] # all interfaces, port 8080 if socket.has_dualstack_ipv6[]: s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True] else: s = socket.create_server[addr]
539tê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]
540sự 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]544socket. 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.
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ó;
import socket addr = ["", 8080] # all interfaces, port 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 toimport socket addr = ["", 8080] # all interfaces, port 8080 if socket.has_dualstack_ipv6[]: s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True] else: s = socket.create_server[addr]
580import socket addr = ["", 8080] # all interfaces, port 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ớiimport socket addr = ["", 8080] # all interfaces, port 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 constructorsocket. 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 writingIn 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