Mô-đun này cung cấp quyền truy cập vào giao diện ổ cắm BSD. Nó có sẵn trên tất cả các hệ thống Unix, Windows, MacOS hiện đại và có thể là các nền tảng bổ sung
Ghi chú
Một số hành vi có thể phụ thuộc vào nền tảng, vì các cuộc gọi được thực hiện tới các API socket của hệ điều hành
không phải Emscripten, không phải WASI
Mô-đun này không hoạt động hoặc không khả dụng trên nền tảng WebAssugging
import socket addr = ["", 8080] # all interfaces, port 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 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]7. Xem để biết thêm thông tin
Giao diện Python là sự chuyển ngữ đơn giản của lệnh gọi hệ thống Unix và giao diện thư viện cho các ổ cắm sang kiểu hướng đối tượng của Python. 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ả về một đối tượng ổ cắm có các phương thức thực hiện các lệnh gọi hệ thống ổ cắm khác nhau. Các loại tham số ở cấp độ cao hơn một chút so với trong giao diện C. như với các thao 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]9 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]]]0 trên các tệp Python, việc cấp phát bộ đệm cho các thao tác nhận là tự động và độ dài bộ đệm ẩn đối với các thao tác gửi
Xem thêm
mô-đunCác lớp đơn giản hóa việc viết máy chủ mạng
mô-đunTrình bao bọc TLS/SSL cho các đối tượng ổ cắm
Họ ổ cắm
Tùy thuộc vào hệ thống và các tùy chọn xây dựng, các họ ổ cắm khác nhau được mô-đun này hỗ trợ
Định dạng địa chỉ được yêu cầu bởi một đối tượng ổ cắm cụ thể được chọn tự động dựa trên họ địa chỉ được chỉ định khi đối tượng ổ cắm được tạo. Địa chỉ ổ cắm được biểu diễn như sau
Địa chỉ của ổ cắm được liên kết với nút hệ thống tệp được biểu diễn dưới dạng chuỗi, sử dụng mã hóa hệ thống tệp và trình xử lý lỗ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]]]
4 [xem PEP 383]. Một địa chỉ trong không gian tên trừu tượng của Linux được trả về dưới dạng a với byte null ban đầu; . Một đối tượng giống như chuỗi hoặc byte có thể được sử dụng cho một trong hai loại địa chỉ khi chuyển nó làm đối sốĐã thay đổi trong phiên bản 3. 3. Trước đây, đường dẫn ổ cắm được cho là sử dụng mã hóa UTF-8.
Đã thay đổi trong phiên bản 3. 5. Có thể ghi hiện được chấp nhận.
Một 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]]]
6 được sử dụng cho họ địa chỉ, trong đó máy chủ lưu trữ là một chuỗi đại diện cho tên máy chủ trong ký hiệu miền internet 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]]]
8 hoặc địa chỉ IPv4 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 và cổng là một số nguyênĐối với địa chỉ IPv4, hai hình thức đặc biệt được chấp nhận thay vì địa chỉ máy chủ lưu trữ.
import socket, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]
0 đại diện choimport socket, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]
1, được sử dụng để liên kết với tất cả các giao diện và chuỗiimport socket, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]
2 đại diện choimport socket, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]
3. Hành vi này không tương thích với IPv6, do đó, bạn có thể muốn tránh những điều này nếu bạn có ý định hỗ trợ IPv6 với các chương trình Python của mình
Đối với họ địa chỉ, một bộ bốn bộ
import socket, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]
5 được sử dụng, trong đó flowinfo và scope_id đại diện cho các thành viênimport socket, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]
6 vàimport socket, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]
7 trongimport socket, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]
8 trong C. Đối với các phương thức mô-đun, có thể bỏ qua flowinfo và scope_id để tương thích ngược. Tuy nhiên, xin lưu ý rằng việc bỏ qua scope_id có thể gây ra sự cố khi thao tác với các địa chỉ IPv6 có phạm viĐã thay đổi trong phiên bản 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]
70 [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]
71]. Thông tin này là không cần thiết và có thể được bỏ qua một cách an toàn [được khuyến nghị].Ổ 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]
72 được biểu diễn dưới dạng cặpimport socket addr = ["", 8080] # all interfaces, port 8080 if socket.has_dualstack_ipv6[]: s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True] else: s = socket.create_server[addr]
73Hỗ trợ TIPC chỉ dành cho Linux có sẵn bằng cách sử dụng họ địa 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]
74. TIPC là một giao thức nối mạng mở, không dựa trên IP được thiết kế để sử dụng trong môi trường máy tính nhóm. Địa chỉ được đại diện bởi một bộ và các trường phụ thuộc vào loại địa chỉ. Dạng bộ dữ liệu chung 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]
75, trong đóaddr_type 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]
76,import socket addr = ["", 8080] # all interfaces, port 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 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]
78phạm vi 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]
79,import socket addr = ["", 8080] # all interfaces, port 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 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]
71Nếu addr_type 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]
77, thì v1 là loại máy chủ, v2 là mã định danh cổng và v3 phải là 0Nếu addr_type 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]
76, thì v1 là loại máy chủ, v2 là số cổng dưới và v3 là số cổng trênNếu addr_type 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]
78, thì v1 là nút, v2 là tham chiếu và v3 phải được đặt thành 0
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]
75 được sử dụng cho họ địa chỉ, trong đó giao diện là một chuỗi đại diện cho tên giao diện mạ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]
77. Tên giao diện mạngimport socket, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]
0 có thể được sử dụng để nhận các gói từ tất cả các giao diện mạng của họ nàygiao thức yêu cầ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]
50 trong đó cả hai tham số bổ sung đều là số nguyên dài không dấu đại diện cho mã định danh CAN [tiêu chuẩn hoặc mở rộng]giao thức yêu cầ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]
52 trong đó các tham số bổ sung là số nguyên không dấu 64 bit biểu thị tên ECU, số nguyên không dấu 32 bit biểu thị Số nhóm tham số [PGN] và số nguyên 8 bit biểu thị địa chỉ
Một chuỗi hoặc một bộ
import socket addr = ["", 8080] # all interfaces, port 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 được sử dụng cho giao thứ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]
54 của 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]
55. Chuỗi là tên của điều khiển hạt nhân sử dụng ID được gán động. Bộ dữ liệu có thể được sử dụng nếu biết ID và số đơn vị của điều khiển hạt nhân hoặc nếu ID đã đăng ký được sử dụngMớ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 hỗ trợ các giao thức và định dạng địa chỉ sauimport socket addr = ["", 8080] # all interfaces, port 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 chấp nhậnimport socket addr = ["", 8080] # all interfaces, port 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 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]
59 là địa chỉ Bluetooth dưới dạng chuỗi 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]]]
40 là số nguyê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]]]
41 chấp nhậ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]]]
42 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]
59 là địa chỉ Bluetooth dưới dạng chuỗi 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]]]
44 là số nguyê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]]]
45 chấp nhậ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]]]
46 trong đó>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP] [[socket.AF_INET6, socket.SOCK_STREAM, 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 là số nguyên hoặc chuỗi có địa chỉ Bluetooth của giao diện. [Điều này phụ thuộc vào hệ điều hành của bạn; NetBSD và DragonFlyBSD mong đợi một địa chỉ Bluetooth trong khi mọi thứ khác mong đợi một số nguyên. ]Đã thay đổi trong phiên bản 3. 2. Đã thêm hỗ trợ NetBSD và DragonFlyBSD.
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP] [[socket.AF_INET6, socket.SOCK_STREAM, 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 chấp nhậnimport socket addr = ["", 8080] # all interfaces, port 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 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]
59 là đối tượng chứa địa chỉ Bluetooth ở định dạng chuỗi. [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]]]
52] Giao thức này không được hỗ trợ trong FreeBSD
là giao diện dựa trên ổ cắm chỉ dành cho Linux đối với mật mã Kernel. Một ổ cắm thuật toán được cấu hình với một bộ gồm hai đến bốn phần 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]]]
54, trong đótype là kiểu thuật toán dưới dạng string, e. g. ________ 555, ________ 556, ________ 557 hoặc ________ 558
name là tên thuật toán và chế độ hoạt động dưới dạng chuỗi, e. g. ________ 559, ________ 620, ________ 621 hoặc ________ 622
sợ hãi và mặt nạ là số nguyên 32 bit không dấu
Linux >= 2. 6. 38
Một số loại thuật toán yêu cầu Kernel gần đây hơn
Mới trong phiên bản 3. 6
cho phép giao tiếp giữa các máy ảo và máy chủ của chúng. Ổ cắm được biểu diễn dưới dạng bộ dữ liệu
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP] [[socket.AF_INET6, socket.SOCK_STREAM, 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 trong đó ID ngữ cảnh hoặc CID và cổng là số nguyênLinux >= 3. 9
Xem sock[7]
Mới trong phiên bản 3. 7
là giao diện cấp thấp trực tiếp với các thiết bị mạng. Các gói được đại diện bởi 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]]]
26 trong đóifname - Chuỗi chỉ định tên thiết bị
proto - Một số nguyên theo thứ tự byte mạng chỉ định số giao thức Ethernet
pkttype - Số nguyên tùy chọn chỉ định loại gó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]]]
27 [mặc định] - Gói được gửi đến máy chủ lưu trữ cục bộ>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP] [[socket.AF_INET6, socket.SOCK_STREAM, 6, '', ['2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0]], [socket.AF_INET, socket.SOCK_STREAM, 6, '', ['93.184.216.34', 80]]]
28 - Gói quảng bá lớp vật 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]]]
29 - Gói được gửi đến địa chỉ multicast lớp vậ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]
00 - Gói đến một số máy chủ khác đã bị trình điều khiển thiết bị bắt ở chế độ hỗn tạpimport socket addr = ["", 8080] # all interfaces, port 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 - Gói có nguồn gốc từ máy chủ cục bộ được lặp lại vào ổ cắm gói
hatype - Số nguyên tùy chọn chỉ định loại địa chỉ phần cứng ARP
addr - Đối tượng giống như byte tùy chọn chỉ định địa chỉ vật lý của phần cứng, việc diễn giải tùy thuộc vào thiết bị
Linux >= 2. 2
là giao diện dựa trên ổ cắm chỉ dành cho Linux để giao tiếp với các dịch vụ chạy trên bộ đồng xử lý trong nền tảng Qualcomm. Họ địa chỉ được biểu diễn dưới dạng 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]
03 trong đó nút và cổng là các số nguyên không âmLinux >= 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 là một biến thể của UDP cho phép bạn chỉ định phần nào của gói được bao phủ bởi tổng kiểm tra. Nó thêm hai tùy chọn ổ cắm mà bạn có thể thay đổ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]
05 sẽ thay đổi phần nào của các gói gửi đi được bao phủ bởi tổng kiểm tra 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]
06 sẽ lọc ra các gói bao gồm quá ít dữ liệu của chúng. Trong cả hai trường 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]
07 nên ở trongimport socket addr = ["", 8080] # all interfaces, port 8080 if socket.has_dualstack_ipv6[]: s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True] else: s = socket.create_server[addr]
08Một ổ cắm như vậy phải được xây dự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]
09 cho IPv4 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]
10 cho IPv6Linux >= 2. 6. 20, FreeBSD >= 10. 1
Mới trong phiên bản 3. 9
Nếu bạn sử dụng tên máy chủ trong phần máy chủ của địa chỉ ổ cắm IPv4/v6, chương trình có thể hiển thị hành vi không xác định, vì Python sử dụng địa chỉ đầu tiên được trả về từ độ phân giải DNS. Địa chỉ ổ cắm sẽ được phân giải khác thành địa chỉ IPv4/v6 thực tế, tùy thuộc vào kết quả từ độ phân giải DNS và/hoặc cấu hình máy chủ. Đối với hành vi xác định, hãy sử dụng địa chỉ số trong phần máy chủ
Tất cả các lỗi tăng ngoại lệ. Các ngoại lệ thông thường đối với các loại đối số không hợp lệ và điều kiện hết bộ nhớ có thể được nêu ra. Các lỗi liên quan đến ngữ nghĩa của ổ cắm hoặc địa chỉ hoặc một trong các lớp con của nó
Chế độ không chặn được hỗ trợ thông qua. Việc tổng quát hóa điều này dựa trên thời gian chờ được hỗ trợ thông qua
nội dung mô-đun
Mô-đun xuất các phần tử sau
ngoại lệ
ngoại lệ ổ cắm. lỗiMột bí danh không dùng nữa của
Đã thay đổi trong phiên bản 3. 3. Sau PEP 3151, lớp này được đặt bí danh là.
ngoại lệ ổ cắm. lỗiMột lớp con của , ngoại lệ này được đưa ra đối với các lỗi liên quan đến địa chỉ, tôi. e. đối với các chức năng sử dụng h_errno trong API POSIX C, bao gồm và. Giá trị đi kèm 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]20 biểu thị lỗi được trả về bởi lệnh gọi thư viện. h_errno là một giá trị số, trong khi chuỗi đại diện cho mô tả của h_errno, được trả về 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]21 C
Đã thay đổi trong phiên bản 3. 3. Lớp này được tạo thành lớp con của.
ngoại lệ ổ cắm. gaierrorMột lớp con của , ngoại lệ này được đưa ra đối với các lỗi liên quan đến địa chỉ bởi và. Giá trị đi kèm 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]26 biểu thị lỗi được trả về bởi lệnh gọi thư viện. chuỗi đại diện cho mô tả lỗi, như được trả về 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]27 C. Giá trị lỗi số sẽ khớp với 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]28 được xác định trong mô-đun này
Đã thay đổi trong phiên bản 3. 3. Lớp này được tạo thành lớp con của.
ngoại lệ ổ cắm. hết giờMột bí danh không dùng nữa của
Một lớp con của , ngoại lệ này được đưa ra khi thời gian chờ xảy ra trên ổ cắm đã hết thời gian chờ được bật thông qua lệnh gọi trước tới [hoặc ngầm định thông qua ]. 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”
Đã thay đổi trong phiên bản 3. 3. Lớp này được tạo thành lớp con của.
Đã thay đổi trong phiên bản 3. 10. Lớp này được đặt bí danh là.
hằng số
ổ cắm. AF_UNIXổ cắm. AF_INETổ cắm. AF_INET6Cá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]37Mớ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ố 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ỉ và dường như là hữu ích nói chung. ]ổ 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]
Xem thêm
Xử lý mô tả tệp an toàn để được giải thích kỹ lưỡng hơn
Linux >= 2. 6. 27
Mới trong phiên bản 3. 2
SO_*ổ cắm. SOMAXCONNMSG_*SOL_*SCM_*IPPROTO_*IPPORT_*INADDR_*IP_*IPV6_*EAI_*AI_*NI_*TCP_*Nhiều hằng số của các dạng này, được ghi lại trong tài liệu Unix về ổ cắm và/hoặc giao thức IP, cũng được xác định trong mô-đun ổ cắm. Chúng thường được sử dụng trong các đối số cho các phương thức
import socket addr = ["", 8080] # all interfaces, port 8080 if socket.has_dualstack_ipv6[]: s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True] else: s = socket.create_server[addr]44 và
import socket addr = ["", 8080] # all interfaces, port 8080 if socket.has_dualstack_ipv6[]: s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True] else: s = socket.create_server[addr]45 của các đối tượng ổ cắm. Trong hầu hết các trường hợp, chỉ những ký hiệu được xác định trong tệp tiêu đề Unix mới được xác định;
Đã thay đổi trong phiên bản 3. 6. ______046,
import socket addr = ["", 8080] # all interfaces, port 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. ______054 đã được thêm vào.
Trên Windows, ________ 055, ________ 056 xuất hiện nếu thời gian chạy Windows hỗ trợ
Đã thay đổi trong phiên bản 3. 10. ______057 đã được thêm vào. Đã thêm
import socket addr = ["", 8080] # all interfaces, port 8080 if socket.has_dualstack_ipv6[]: s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True] else: s = socket.create_server[addr]58. Trên MacOS, hằng số này có thể được sử dụng giống như cách mà
import socket addr = ["", 8080] # all interfaces, port 8080 if socket.has_dualstack_ipv6[]: s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True] else: s = socket.create_server[addr]55 được sử dụng trên Linux.
Đã thay đổi trong phiên bản 3. 11. Đã thêm
import socket addr = ["", 8080] # all interfaces, port 8080 if socket.has_dualstack_ipv6[]: s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True] else: s = socket.create_server[addr]60. Trên MacOS, hằng số này có thể được sử dụng giống như cách mà
import socket addr = ["", 8080] # all interfaces, port 8080 if socket.has_dualstack_ipv6[]: s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True] else: s = socket.create_server[addr]61 được sử dụng trên Linux và BSD. ổ cắm. AF_CANổ cắm. PF_CANSOL_CAN_*CAN_*
Nhiều hằng số của các dạng này, được ghi lại trong tài liệu Linux, cũng được định nghĩa trong mô-đun ổ cắm
Linux >= 2. 6. 25, NetBSD >= 8
Mới trong phiên bản 3. 3
Đã thay đổi trong phiên bản 3. 11. Đã thêm hỗ trợ NetBSD.
ổ cắm. CAN_BCMCAN_BCM_*CAN_BCM, trong họ giao thức CAN, là giao thức quản lý quảng bá [BCM]. Các hằng số của trình quản lý phát sóng, được ghi lại trong tài liệu Linux, cũng được xác định trong mô-đun ổ cắm
Linux >= 2. 6. 25
Ghi 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]62 chỉ khả dụng trên Linux >= 4. 8
Mới trong phiên bản 3. 4
ổ cắm. CAN_RAW_FD_FRAMESCho 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
Linux >= 3. 6
Mới trong phiên bản 3. 5
ổ cắm. CAN_RAW_JOIN_FILTERSTham 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
Linux >= 4. 1
Mới trong phiên bản 3. 9
ổ cắm. CAN_ISOTPCAN_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
Linux >= 2. 6. 25
Mới trong phiên bản 3. 7
ổ cắm. CAN_J1939CAN_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
Linux >= 5. 4
Mới trong phiên bản 3. 9
ổ cắm. AF_PACKETổ cắm. PF_PACKETPACKET_*Nhiều hằng số của các dạng này, được ghi lại trong tài liệu Linux, cũng được định nghĩa trong mô-đun ổ cắm
Linux >= 2. 2
ổ cắm. AF_RDSổ cắm. ổ cắm PF_RDS. SOL_RDSRDS_*Nhiều hằng số của các dạng này, được ghi lại trong tài liệu Linux, cũng được định nghĩa trong mô-đun ổ cắm
Linux >= 2. 6. 30
Mới trong phiên bản 3. 3
ổ cắm. SIO_RCVALLổ cắm. SIO_KEEPALIVE_VALSổ cắm. SIO_LOOPBACK_FAST_PATHRCVALL_*Các hằng số cho WSAIoctl[] của Windows. Các hằng số được sử dụng làm đối số cho phương thức của các đối tượng socket
Đã thay đổi trong phiên bản 3. 6. ______064 đã được thêm vào.
MẸO_*Các hằng số liên quan đến TIPC, khớp với các hằng số được xuất bởi API ổ cắm C. Xem tài liệu TIPC để biết thêm thông tin
ổ cắm. AF_ALGổ cắm. SOL_ALGALG_*Các hằng số cho mã hóa hạt nhân Linux
Linux >= 2. 6. 38
Mới trong phiên bản 3. 6
ổ cắm. AF_VSOCKổ cắm. IOCTL_VM_SOCKETS_GET_LOCAL_CIDVMADDR*SO_VM*Các hằng số cho giao tiếp máy chủ/khách Linux
Linux >= 4. 8
Mới trong phiên bản 3. 7
ổ cắm. AF_LINKBSD, macOS
Mới trong phiên bản 3. 4
ổ cắm. has_ipv6Hằ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ể được sử dụng để 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]]]41ổ cắm. HCI_FILTERổ cắm. ổ cắm HCI_TIME_STAMP. 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]]]45. không có sẵn cho NetBSD hoặc DragonFlyBSD. và không khả dụng 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
Linux >= 4. 7
ổ cắm. SCM_CREDS2ổ cắm. LOCAL_CREDSổ cắm. LOCAL_CREDS_PERSISTENTLOCAL_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
BSD miễn phí
ổ cắm. SO_INCOMING_CPUHằ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
Linux >= 3. 9
Chức năng
Tạo ổ cắm
Tất cả các chức năng sau đây tạo ra
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à [mặc định], , , , hoặc. Loại ổ cắm phải là [mặc định], 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à giao thức 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, , hoặc
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ề nhưng không phải là tài nguyên hệ điều hành thực tế. Không giống như, 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
Ổ cắm mới được tạo là
Tăng 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]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.
Đã thay đổi trong phiên bản 3. 7. Khi hoặc cờ bit được áp dụng cho loại, chúng sẽ bị xóa và sẽ không phản ánh chúng. 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]20
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. Giao thức CAN_J1939 đã được thêm vào.
Đã thay đổi trong phiên bản 3. 10. Giao thức IPPROTO_MPTCP đã được thêm vào.
ổ cắm. cặp ổ cắm[[gia đình[, type[, proto]]]]Xây dựng một cặp đối tượng ổ cắm được kết nối bằng cách sử dụng họ địa chỉ, loại ổ cắm và số giao thức đã cho. 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. Họ mặc định là nếu được xác định trên nền tảng;
Các ổ cắm mới được tạo là
Đã thay đổi trong phiên bản 3. 2. Các đối tượng ổ cắm được trả về hiện hỗ trợ toàn bộ API ổ cắm, thay vì một tập hợp con.
Đã thay đổi trong phiên bản 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]Kết nối với dịch vụ TCP đang nghe trên địa chỉ internet [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. Đây là một chức năng cấp cao hơn so với. 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ả và , 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, cài đặt thời gian chờ mặc định chung được 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. Theo mặc định, nó là ngoại lệ từ địa chỉ cuối cùng trong danh sách. 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, nó chứa lỗi của tất cả các lần thử
Đã thay đổi trong phiên bản 3. 2. source_address đã được thêm.
Đã thay đổi trong phiên bản 3. 11. all_errors đã được thêm vào.
ổ cắm. 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à một trong hai hoặc. tồn đọng là kích thước hàng đợi được chuyển đến; . 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ợ 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. Hầu hết các nền tảng POSIX và Windows được cho là hỗ trợ chức năng này. Khi chức năng này được bật, địa chỉ được trả về 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]. Tham số này có thể được sử dụng kết hợp 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]
Ghi chú
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[]Trả lạ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]]]11 nếu nền tảng hỗ trợ tạo ổ cắm TCP có thể xử lý cả kết nối IPv4 và IPv6
Mới trong phiên bản 3. 8
ổ cắm. 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ể thất bại 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 để nhận 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]. Ổ cắm được coi là ở chế độ chặn
Ổ cắm mới được tạo là
Đã thay đổi trong phiên bản 3. 4. Ổ cắm được trả về hiện không thể kế thừa.
ổ cắm. 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. Ổ cắm được coi là ở chế độ chặn
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
Cac chưc năng khac
Mô-đun này cũng cung cấp các dịch vụ liên quan đến mạng khác nhau
ổ cắm. đóng[fd]Đóng bộ mô tả tệp ổ cắm. Điều này giống như , nhưng đối với ổ cắm. Trên một số nền tảng [đáng chú ý nhất là Windows] không hoạt động đối với bộ mô tả tệp ổ cắm
Mới trong phiên bản 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
Các đối số họ, loại và nguyên mẫu có thể được chỉ định tùy chọn để thu hẹp danh sách địa chỉ được trả về. Việc chuyển số 0 làm giá trị cho từng đối số này sẽ chọn toàn bộ phạm vi kết quả. Đối số flags có thể là một hoặc một số 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]]]36 và sẽ ảnh hưởng đến cách tính toán và trả về kết quả. 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]]]37 sẽ vô hiệu hóa độ phân giải tên miền và sẽ gây ra lỗi nếu máy chủ lưu trữ là một tên miền
Hàm trả về danh sách 5 bộ có cấu trúc sau
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP] [[socket.AF_INET6, socket.SOCK_STREAM, 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
Trong các bộ dữ liệu này, họ, loại, nguyên mẫu đều là số nguyên và được truyề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. canonname sẽ là một chuỗi đại diện cho tên chuẩn của máy chủ lưu trữ nếu
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP] [[socket.AF_INET6, socket.SOCK_STREAM, 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 là một phần của đối số flags; . sockaddr là một bộ mô tả một địa chỉ ổ cắm, có định dạng phụ thuộc vào họ được trả về [một bộ 2
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP] [[socket.AF_INET6, socket.SOCK_STREAM, 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 cho , một bộ 4
>>> socket.getaddrinfo["example.org", 80, proto=socket.IPPROTO_TCP] [[socket.AF_INET6, socket.SOCK_STREAM, 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 cho ] và có nghĩa là được truyền cho phương thức
Tăng 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]]]46 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]]]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]70. ổ 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ề đượ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ừ đượ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 để có giao diện đầy đủ hơn. không hỗ trợ độ phân giải tên IPv6 và nên được sử dụng thay thế cho hỗ trợ ngăn xếp kép IPv4/v6
Tăng 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]]]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
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 . không hỗ trợ độ phân giải tên IPv6 và nên được sử dụng thay thế cho hỗ trợ ngăn xếp kép IPv4/v6
Tăng 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]]]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
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 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]]]68 mà không có đối số
Ghi chú. không phải lúc nào cũng trả lại tên miền đủ điều kiện;
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. hỗ trợ cả IPv4 và IPv6
Tăng 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]]]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
không phải WASI
ổ cắm. getnameinfo[sockaddr , cờ]Dịch địa chỉ ổ cắm 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]70 đượ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 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]]]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
không phải WASI
ổ cắm. getprotobyname[tên giao thức]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ô" [];
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 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]]]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
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 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]]]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
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 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 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 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 nhị phân được đóng gói 32 bit mà hàm này trả về
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ệ, sẽ tăng. 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
không hỗ trợ IPv6 và nên được sử dụng 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 [độ 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ó [ví dụ: '123. 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 không có độ dài chính xác là 4 byte, thì sẽ tăng lên. không hỗ trợ IPv6 và nên được sử dụng thay thế cho hỗ trợ ngăn xếp kép IPv4/v6
Đã thay đổi trong phiên bản 3. 5. Có thể ghi hiện được chấp nhận.
ổ 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. 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ư ] hoặc
import socket, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]08
Các giá trị được hỗ trợ cho address_family hiện tại và. Nếu chuỗi địa chỉ IP ip_string không hợp lệ, sẽ tă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, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]00
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 một địa chỉ IP được đóng gói [một số byte] thành biểu diễn chuỗi tiêu chuẩn, dành riêng cho họ [ví dụ:
import socket, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]13 hoặc
import socket, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]14]. 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ư ] hoặc
import socket, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]08
Các giá trị được hỗ trợ cho address_family hiện tại và. Nếu đối tượng bytepack_ip không có độ dài chính xác cho họ địa chỉ đã chỉ định, sẽ tăng lên. được đưa ra cho các lỗi từ cuộc gọi đến
Hệ điều hành Unix, Windows
Đã thay đổi trong phiên bản 3. 4. Đã thêm hỗ trợ Windows
Đã thay đổi trong phiên bản 3. 5. Có thể ghi hiện được chấp nhận.
ổ 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. Giá trị này thường có thể được sử dụng làm kích thước bộ đệm để nhận một mục dữ liệu phụ trợ, nhưng RFC 3542 yêu cầu sử dụng các ứng dụng di động và do đó bao gồm không gian cho phần đệm, ngay cả khi mục này sẽ là mục cuối cùng trong bộ đệm. Tăng nếu chiều dài nằm ngoài phạm vi giá trị cho phép
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]Trả về kích thước bộ đệm cần thiết để nhận một mục dữ liệu phụ với dữ liệu được liên kết có độ dài nhất định, cùng với bất kỳ phần đệm theo sau nào. Không gian bộ đệm cần thiết để nhận nhiều mục là tổng các giá trị cho độ dài dữ liệu được liên kết của chúng. Tăng nếu chiều dài nằm ngoài phạm vi giá trị cho phép
Lưu ý rằng một số hệ thống có thể hỗ trợ dữ liệu phụ trợ mà không cung cấp chức năng này. 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
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. Giá trị 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]]]31 chỉ ra rằng các đối tượng ổ cắm mới không có thời gian chờ. 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. Xem các giá trị có thể và ý nghĩa tương ứng của chúngổ cắm. sethostname[tên]
Đặt tên máy chủ của máy thành tên. Điều này sẽ tăng nếu bạn không có đủ quyền
Tăng một
import socket, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]35 với đối số
import socket, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]36
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]. nếu cuộc gọi hệ thống không thành cô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.
Ghi chú
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, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]
38Tên.
import socket, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]
39tên thân thiện.
import socket, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]
40sự mô tả.
import socket, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]
41
Hàm này trả về tên của biểu mẫu thứ hai từ danh sách,
import socket, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]39 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. nếu không có giao diện với tên đã cho tồn tại
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.
Xem thêm
“Tên giao diện” là tên được ghi trong tài liệu
ổ 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. nếu không có giao diện nào với chỉ mục đã cho tồn tại
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.
Xem thêm
“Tên giao diện” là tên được ghi trong tài liệu
ổ cắm. send_fds[sock , bộ đệm, fds[, flags[, address]]]Gửi danh sách các bộ mô tả tệp fds qua một ổ cắm. Tham số fds là một chuỗi các bộ mô tả tệp. Tham khảo
import socket, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]48 để biết tài liệu về các thông số này
Unix, Windows, không phải Emscripten, không phải WASI
Nền tảng Unix hỗ trợ và cơ chế
import socket, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]50
Mới trong phiên bản 3. 9
ổ cắm. recv_fds[sock , bufsize, maxfds[, flags]]Nhận tối đa bộ mô tả tệp maxfds từ một ổ cắm. Trả lại
import socket, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]52. Tham khảo
import socket, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]24 để biết tài liệu về các tham số này
Unix, Windows, không phải Emscripten, không phải WASI
Nền tảng Unix hỗ trợ và cơ chế
import socket, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]50
Mới trong phiên bản 3. 9
Ghi chú
Bất kỳ số nguyên bị cắt nào ở cuối danh sách bộ mô tả tệp
Đối tượng ổ cắm
Các đối tượng ổ cắm có các phương thức sau. Ngoại trừ , chúng tương ứng với các cuộc gọi hệ thống Unix áp dụng cho ổ cắm
Đã thay đổi trong phiên bản 3. 2. Hỗ trợ cho giao thức đã được thêm vào. Thoát khỏi trình quản lý bối cảnh tương đương với việc gọi.
ổ cắm. chấp nhận[]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, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]58 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à
Đã thay đổi trong phiên bản 3. 4. Ổ cắm hiện không thể kế thừa.
Đã thay đổi trong phiên bản 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 thức hiện sẽ thử lại lệnh gọi hệ thống thay vì đưa ra ngoại lệ [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 một
import socket, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]60 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, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]62
không phải WASI
ổ cắm. đóng[]Đánh dấu ổ cắm đã đóng. Tài nguyên hệ thống cơ bản [e. g. một bộ mô tả tệp] cũng bị đóng khi tất cả các đối tượng tệp từ bị đóng. Khi điều đó xảy ra, tất cả các hoạt động trong tương lai trên đối tượng ổ cắm sẽ không thành công. Đầu từ xa sẽ không nhận thêm dữ liệu [sau khi xóa dữ liệu trong hàng đợi]
Các ổ cắm sẽ tự động đóng khi chúng được thu gom rác, nhưng nên sử dụng chúng một cách rõ ràng hoặc sử dụng một câu lệnh xung quanh chúng
Đã thay đổi trong phiên bản 3. 6. 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, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]57 cơ bản.
Ghi chú
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 trước
ổ cắm. kết nối[địa chỉ]Kết nối với ổ cắm từ xa tại địa chỉ. [Định dạng của địa chỉ phụ thuộc vào họ địa chỉ — xem ở trên. ]
Nếu kết nối bị gián đoạn bởi 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 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ệ 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 một
import socket, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]73 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, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]62
Đã 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ệ 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 chặn hoặc hết thời gian chờ [ .
không phải WASI
ổ cắm. connect_ex[địa chỉ]Giống như
import socket, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]77, 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, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]78 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, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]80. Điều này rất hữu ích để hỗ trợ, chẳng hạn như các kết nối không đồng bộ
Tăng một
import socket, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]73 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, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]62
không phải WASI
ổ cắm. 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. Bộ mô tả tệp được trả lại và có thể được sử dụng lại cho các mục đích khác
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à
Đã thay đổi trong phiên bản 3. 4. Ổ cắm hiện không thể kế thừa.
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
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ư ]. Unix không có giới hạn này
ổ cắm. get_inheritable[]Nhận bộ mô tả tệp của ổ cắm hoặc tay cầm của ổ 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]]]11 nếu ổ cắm có thể được kế thừa trong các tiến trình con,
import socket, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]87 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. [Định dạng của địa chỉ được trả về tùy thuộc vào họ địa chỉ — xem ở trên. ] Trên một số hệ thống, chức năng này không được hỗ trợ
ổ cắm. getsockname[]Trả về địa chỉ riêng của ổ cắm. Ví dụ, điều này rất hữu ích để tìm ra số cổng của ổ cắm IPv4/v6. [Đị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]]Trả về giá trị của tùy chọn ổ cắm đã cho [xem trang hướng dẫn Unix getockopt[2]]. Các hằng ký hiệu cần thiết [
import socket, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]88, v.v. ] đượ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. Người gọi phải giải mã nội dung của bộ đệm [xem mô-đun tích hợp tùy chọn để biết cách giải mã cấu trúc C được mã hóa dưới dạng chuỗi byte]
không phải WASI
ổ cắm. bị chặn[]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]]]11 nếu ổ cắm ở chế độ chặn,
import socket, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]87 nếu ở chế độ không chặn
Điều này tương đương với việc kiểm tra
import socket, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]92
Mới trong phiên bản 3. 7
ổ cắm. thời gian chờ[]Trả lại thời gian chờ tính bằng giây [float] được liên kết với các hoạt động của ổ cắm 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 nếu không có thời gian chờ nào được đặt. Điều này phản ánh cuộc gọi cuối cùng đến hoặcổ cắm. ioctl[kiểm soát , tùy chọn]Platform
các cửa sổ
Phương pháp này 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, chức năng chung và chức năng có thể được sử dụng;
Hiện tại chỉ có các mã kiểm soát sau được hỗ trợ.
import socket, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]99,
import socket addr = ["", 8080] # all interfaces, port 8080 if socket.has_dualstack_ipv6[]: s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True] else: s = socket.create_server[addr]700 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. ______064 đã được thêm vào.
ổ cắm. lắng nghe[[tồn đọng]]Cho phép máy chủ chấp nhận kết nối. 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]; . Nếu không được chỉ định, giá trị hợp lý mặc định sẽ được chọn
không phải WASI
Đã thay đổi trong phiên bản 3. 5. Tham số tồn đọng hiện là tùy chọn.
Trả lại một liên kết với ổ cắm. Loại trả về chính xác phụ thuộc vào các đối số được cung cấp cho. Các đối số này được diễn giải theo cách tương tự như bởi hàm 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]705 [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]706 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]707
Ổ cắm phải ở chế độ chặn;
Việc đóng đối tượng tệp được trả về 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à đã được gọi trên đối tượng ổ cắm
Ghi chú
Trên Windows, không thể sử dụng đối tượng dạng tệp được tạo bởi đối tượng tệp có bộ mô tả tệp, chẳng hạn như đối số luồng của
ổ cắm. recv[bufsize[ , flags]]Nhận dữ liệu từ ổ cắm. Giá trị trả về là một đối tượng byte đại diện cho dữ liệu nhận được. Lượng dữ liệu tối đa được nhận cùng một lúc được chỉ định bởi bufsize. Xem trang thủ công Unix recv[2] để biết ý nghĩa của các cờ đối số tùy chọn;
Ghi chú
Để 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
Đã thay đổi trong phiên bản 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 thức hiện sẽ thử lại lệnh gọi hệ thống thay vì đưa ra ngoại lệ [xem PEP 475 để biết lý do].
ổ cắm. 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]713 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. 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. ]
Đã thay đổi trong phiên bản 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 thức hiện sẽ thử lại lệnh gọi hệ thống thay vì đưa ra ngoại lệ [xem PEP 475 để biết lý do].
Đã thay đổi trong phiên bản 3. 7. Đối với địa chỉ IPv6 multicast, 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]70 nữa. Để có được địa chỉ IPv6 đầy đủ, hãy sử dụng. ổ 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 toán bằng cách sử dụng hoặc , 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
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]720. Mục dữ liệu là một đối tượng chứa dữ liệu không phụ trợ nhận được. Mục ancdata là một danh sách gồm 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]722 đại diện cho dữ liệu phụ trợ [thông báo điều khiển] nhận được. 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 chứa dữ liệu được liên kết. Mục msg_flags là OR theo bit của các cờ khác nhau cho biết các điều kiện trên thông báo nhận được; . Nếu ổ cắm nhận không được kết nối, địa chỉ là địa chỉ của ổ cắm gửi, nếu có;
Trên một số hệ thống, và có thể được sử dụng để chuyển bộ mô tả tệp giữa các quy trình qua một ổ cắm. Khi tiện ích này được sử dụng [nó thường bị hạn chế đối với ổ cắm], sẽ trả về, trong dữ liệu phụ trợ của nó, các mục có dạng
import socket addr = ["", 8080] # all interfaces, port 8080 if socket.has_dualstack_ipv6[]: s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True] else: s = socket.create_server[addr]729, trong đó fds là một đối tượng đại diện cho các bộ mô tả tệp mới dưới dạng một mảng nhị phân của C int type. If raises an exception after the system call returns, it will first attempt to close any file descriptors received via this mechanism.
Một số hệ thống không chỉ ra độ dài cắt ngắn của các mục dữ liệu phụ trợ chỉ được nhận một phần. Nếu một mục dường như mở rộng ra ngoài phần cuối của bộ đệm, sẽ phát hành một 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, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]50, hàm sau đây 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 như nhận được thông báo điều khiển không liên quan]. Xem thêm
import socket, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]
Unix
Hầu hết các nền tảng Unix
Mới trong phiên bản 3. 3
Đã thay đổi trong phiên bản 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 thức hiện sẽ thử lại lệnh gọi hệ thống thay vì đưa ra ngoại lệ [xem PEP 475 để biết lý do].
ổ cắm. recvmsg_into[bộ đệm[ , ancbufsize[, flags]]]Nhận dữ liệu bình thường và dữ liệu phụ trợ từ ổ cắm, hoạt động như bình thường, nhưng phân tán dữ liệu không phụ trợ vào một loạt bộ đệm thay vì trả về một đối tượng byte mới. Đố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. các đối tượng]; . Hệ điều hành có thể đặt giới hạn [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]740] về số lượng bộ đệm có thể được sử dụng. Các đối số ancbufsize và flags có cùng ý nghĩa như đối với
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]742, 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
Thí dụ
import socket addr = ["", 8080] # all interfaces, port 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
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[bộ đệm[ , nbytes[, flags]]]Nhận dữ liệu từ ổ cắm, ghi nó vào bộ đệm thay vì tạo một chuỗi ký tự mớ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]744 trong đó nbytes là số byte nhận được và địa chỉ là địa chỉ của ổ cắm gửi dữ liệu. 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. Nếu nbytes không được chỉ định [hoặc 0], hãy nhận tối đa kích thước có sẵn trong bộ đệm đã cho. Trả về số byte nhận được. 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]]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ư ở 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; . Để biết thêm thông tin về chủ đề này, hãy tham khảo ý kiến của
Đã thay đổi trong phiên bản 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 thức hiện sẽ thử lại lệnh gọi hệ thống thay vì đưa ra ngoại lệ [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ư ở trên. Không giống như , phương pháp này tiếp tục gửi dữ liệu từ byte cho đến khi tất cả dữ liệu đã được gửi hoặc xảy ra lỗ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 đượ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.
Đã thay đổi trong phiên bản 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 thức hiện sẽ thử lại lệnh gọi hệ thống thay vì đưa ra ngoại lệ [xem PEP 475 để biết lý do].
ổ cắm. gửi tới[byte , địa chỉ . ]socket.gửi tới[byte , cờ, address]Gửi dữ liệu đến ổ cắm. 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ỉ. Đối số cờ tùy chọn có cùng ý nghĩa như ở trên. 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 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]752 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, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]62
Đã thay đổi trong phiên bản 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 thức hiện sẽ thử lại lệnh gọi hệ thống thay vì đưa ra ngoại lệ [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 nó 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 của [e. g. các đố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]722, 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 liên quan. Lưu ý rằng một số hệ thống [cụ thể là hệ thống không có ] 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. 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 thư. 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 một ổ cắm, trên các hệ thống hỗ trợ cơ chế
import socket, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]50. 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]7
Unix, không phải WASI
Hầu hết các nền tảng Unix
Tăng 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]766 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, array def recv_fds[sock, msglen, maxfds]: fds = array.array["i"] # Array of ints msg, ancdata, flags, addr = sock.recvmsg[msglen, socket.CMSG_LEN[maxfds * fds.itemsize]] for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. fds.frombytes[cmsg_data[:len[cmsg_data] - [len[cmsg_data] % fds.itemsize]]] return msg, list[fds]62
Mới trong phiên bản 3. 3
Đã thay đổi trong phiên bản 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 thức hiện sẽ thử lại lệnh gọi hệ thống thay vì đưa ra ngoại lệ [xem PEP 475 để biết lý do].
ổ cắm. sendmsg_afalg[[tin nhắn , ]*, op[, iv[, assoclen[, flags]]]]Phiên bản chuyên dụng của ổ cắm. Đặt độ dài dữ liệu liên quan đến chế độ, IV, AEAD và cờ cho ổ cắm
Linux >= 2. 6. 38
Mới trong phiên bản 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 và trả về tổng số byte đã được gửi. tệp phải là đối tượng tệp thông thường được mở ở chế độ nhị phân. Nếu không có sẵn [e. g. Windows] hoặc tệp không phải là tệp thông thường 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. Vị trí tệp được cập nhật khi trả lại hoặc cả trong trường hợp có lỗi, trong trường hợp đó có thể được sử dụng để tìm ra số byte đã được gửi. Ổ cắm phải thuộc loại. Ổ cắm không chặn không được hỗ trợ
Mới trong phiên bản 3. 5
ổ cắm. set_inheritable[có thể kế thừa]Đặt bộ mô tả tệp của ổ cắm hoặc tay cầm của ổ cắm
Mới trong phiên bản 3. 4
ổ cắm. thiết lập chặn[cờ]Đặt chế độ chặn hoặc không chặn của ổ cắm. 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à một cách viết tắt cho một số cuộc gọi 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]
779 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]
780import socket addr = ["", 8080] # all interfaces, port 8080 if socket.has_dualstack_ipv6[]: s = socket.create_server[addr, family=socket.AF_INET6, dualstack_ipv6=True] else: s = socket.create_server[addr]
781 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]
782
Đã thay đổi trong phiên bản 3. 7. Phương thức không còn áp dụng cờ trên.
ổ 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à 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. Nếu một giá trị khác không được đưa ra, các hoạt động của ổ cắm tiếp theo sẽ đưa ra một ngoại lệ nếu giá trị khoảng thời gian chờ đã trôi qua trước khi hoạt động hoàn tất. 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 ý kiến của
Đã thay đổi trong phiên bản 3. 7. Phương thức không còn bật cờ.
ổ cắm. setsockopt[cấp độ , optname . , value: ]ổ cắm. setsockopt[cấp độ , optname . , value: bộ đệm]ổ cắm. setsockopt[cấp độ , optname . , None, optlen: int]Đặt giá trị của tùy chọn ổ cắm đã cho [xem trang thủ công Unix setsockopt[2]]. Các hằng ký hiệu cần thiết được xác định trong mô-đun [______988, v.v. ]. Giá trị có thể là số nguyê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 hoặc đại diện cho bộ đệm. Trong trường hợp sau, người gọi phải đảm bảo rằng chuỗi phụ chứa các bit thích hợp [xem mô-đun tích hợp tùy chọn để biết cách mã hóa cấu trúc C dưới dạng chuỗi phụ]. Khi giá trị đượ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]]]31, đối số optlen là bắt buộc. Nó tương đương với việc gọ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]44 C 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]796 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]797
Đã thay đổi trong phiên bản 3. 5. Có thể ghi hiện được chấp nhận.
Đã thay đổi trong phiên bản 3. 6. setsockopt[cấp độ, tên tùy chọn, Không có, optlen. int] đã thêm biểu mẫu.
không phải WASI
ổ cắm. tắt[cách thức]Tắt một hoặc cả hai nửa kết nối. Nếu thế nào 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]798, việc nhận thêm không được phép. Nếu thế nào 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]799, các lần gửi tiếp theo không được phép. Nếu thế nào 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]700, việc gửi và nhận thêm không được phép
không phải WASI
ổ cắm. chia sẻ[process_id]Sao chép một socket và chuẩn bị chia sẻ nó với một process mục tiêu. Quá trình đích phải được cung cấp với process_id. Sau đó, đối tượng byte kết quả có thể được chuyển đến quy trình đích bằng cách sử dụng một số hình thức giao tiếp giữa các quy trình và ổ cắm có thể được tạo lại ở đó bằng cách sử dụng. Khi phương thức này đã được gọi, có thể đóng socket một cách an toàn vì hệ điều hành đã sao chép nó cho tiến trình đích
các cửa sổ
Mới trong phiên bản 3. 3
Lưu ý rằng không có phương phá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]9 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]]]0;
Các đối tượng ổ cắm cũng có các thuộc tính [chỉ đọc] này tương ứng với các giá trị được cung cấp cho hàm tạo
ổ cắm. gia đìnhGia đình ổ cắm
ổ cắm. loạiLoại ổ cắm
ổ cắm. nguyên bảnGiao thức ổ cắm
Ghi chú về thời gian chờ của ổ cắm
Một đối tượng ổ cắm có thể ở một trong ba chế độ. chặn, không chặn hoặc hết thời gian chờ. Ổ cắm theo mặc định luôn được tạo ở chế độ chặn, nhưng điều này có thể được thay đổi bằng cách gọi
Ở chế độ chặn, các thao tác sẽ chặn cho đến khi hoàn tất hoặc hệ thống trả về lỗi [chẳng hạn như hết thời gian kết nối]
Ở chế độ không chặn, các thao tác không thành công [với một lỗi không may phụ thuộc vào hệ thống] nếu chúng không thể được hoàn thành ngay lập tức. các chức năng từ có thể được sử dụng để biết khi nào và liệu ổ cắm có sẵn để đọc hoặc ghi hay không
Ở chế độ hết thời gian chờ, các thao tác không thành công nếu chúng không thể hoàn thành trong thời gian chờ được chỉ định cho ổ cắm [chúng đưa ra một ngoại lệ] hoặc nếu hệ thống trả về lỗi
Ghi chú
Ở cấp hệ điều hành, các ổ cắm ở chế độ hết thời gian chờ được đặt bên trong ở chế độ không chặn. 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. bạn quyết định sử dụng ổ cắm
Thời gian chờ và phương phá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]
711
Hoạt động này cũng tùy thuộc vào cài đặt thời gian chờ và nói chung, nên gọi trước khi gọi hoặc chuyển tham số hết thời gian chờ cho. Tuy nhiên, ngăn xếp mạng hệ thống cũng có thể trả về lỗi hết thời gian kết nối của chính nó bất kể cài đặt thời gian chờ ổ cắm Python nào
Thời gian chờ và phương phá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]
716
Nếu không, ổ cắm được phương thức trả về sẽ kế thừa thời gian chờ đó. Mặt khác, hành vi phụ thuộc vào cài đặt của ổ cắm nghe
nếu ổ cắm đang nghe ở chế độ chặn hoặc ở chế độ hết thời gian chờ, thì ổ cắm được trả về ở chế độ chặn;
nếu ổ cắm đang nghe ở chế độ không chặn, thì việc ổ cắm được trả về ở chế độ chặn hay không chặn phụ thuộc vào hệ điều hành. Nếu bạn muốn đảm bảo hành vi đa nền tảng, bạn nên ghi đè cài đặt này theo cách thủ công
Thí dụ
Dưới đây là bốn chương trình ví dụ tối thiểu sử dụng giao thức TCP/IP. một máy chủ lặp lại tất cả dữ liệu mà nó nhận lại [chỉ phục vụ một máy khách] và một máy khách sử dụng nó. Lưu ý rằng máy chủ phải thực hiện trình 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]8, , , [có thể lặp lại để phục vụ nhiều máy khách], trong khi máy khách chỉ cần trình 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]8,. Cũng lưu ý rằng máy chủ không/trên ổ cắm mà nó đang nghe nhưng trên ổ cắm mới được trả về bởi
Hai ví dụ đầu tiên chỉ hỗ trợ IPv4
import socket addr = ["", 8080] # all interfaces, port 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]]]4
Hai ví dụ tiếp theo giống với hai ví dụ trên, nhưng hỗ trợ cả IPv4 và IPv6. Phía máy chủ sẽ lắng nghe họ địa chỉ đầu tiên có sẵn [thay vào đó, nó sẽ lắng nghe cả hai]. Trên hầu hết các hệ thống sẵn sàng cho IPv6, IPv6 sẽ được ưu tiên và máy chủ có thể không chấp nhận lưu lượng IPv4. Phía máy khách sẽ cố gắng kết nối với tất cả các địa chỉ được trả về do phân giải tên và gửi lưu lượng truy cập đến địa chỉ đầu tiên được kết nối thành cô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]]]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]]]2
Ví dụ tiếp theo cho thấy cách viết một trình thám thính mạng rất đơn giản với các ổ cắm thô trên Windows. Ví dụ yêu cầu quyền quản trị viên để sửa đổi 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]0
Ví dụ tiếp theo cho thấy cách sử dụng giao diện ổ cắm để giao tiếp với mạng CAN bằng giao thức ổ cắm thô. Thay vào đó, để sử dụng CAN với giao thức quản lý quảng bá, hãy mở một ổ cắm 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]1
Sau khi liên kế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]83] hoặc kết nối [] ổ cắm, bạn có thể sử dụng và các thao tác [và đối tác của chúng] trên đối tượng ổ cắm như bình thường
Ví dụ cuối cùng này có thể yêu cầu đặc quyề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]2
Chạy một ví dụ nhiều lần với độ trễ quá nhỏ giữa các lần thực thi có thể dẫn đến lỗi nà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]3
Điều này là do lần thực thi trước đó đã để lại ổ cắm ở trạng thá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]736 và không thể được sử dụng lại ngay lập tức
Có một cờ để thiết lập, để ngăn chặn điều nà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]738
import socket addr = ["", 8080] # all interfaces, port 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
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]]]22 yêu cầu hạt nhân sử dụng lại ổ cắm cục bộ ở trạng thá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]736 mà không cần đợi thời gian chờ tự nhiên của nó hết hạn
Xem thêm
Để biết giới thiệu về lập trình ổ cắm [bằng C], hãy xem các bài báo sau
Giới thiệu 4. Hướng dẫn giao tiếp liên tiến trình 3BSD, bởi Stuart Sechrest
Nâng cao 4. Hướng dẫn giao tiếp liên tiến trình 3BSD, bởi Samuel J. Leffler và cộng sự,
cả trong Hướng dẫn lập trình viên UNIX, Tài liệu bổ sung 1 [phần PS1. 7 và PS1. số 8]. Tài liệu tham khảo dành riêng cho nền tảng cho các cuộc gọi hệ thống liên quan đến ổ cắm khác nhau cũng là một nguồn thông tin có giá trị về các chi tiết của ngữ nghĩa ổ cắm. Đối với Unix, hãy tham khảo các trang hướng dẫn; . Đối với API sẵn sàng cho IPv6, người đọc có thể muốn tham khảo RFC 3493 có tiêu đề Tiện ích mở rộng giao diện ổ cắm cơ bản cho IPv6