socket — 低階網路介面¶
原始碼:Lib/socket.py
這個模組提供了操作 BSD socket 的介面。這在所有現代 Unix 系統、Windows、MacOS,以及一些其他平台上都可用。
備註
由於是呼叫作業系統的 socket API,某些行為可能會因平台而有所差異。
可用性: not WASI.
此模組在 WebAssembly 平台上不起作用或無法使用。更多資訊請參閱 WebAssembly 平台。
Python 的介面是將 Unix 的系統呼叫和 socket 函式庫介面直接轉換成 Python 的物件導向風格:socket() 函式會回傳一個 socket 物件,這個物件的方法實作了各種 socket 系統呼叫。與 C 語言介面相比,參數型別較為高階:就像 Python 文件操作中的 read() 和 write() 一樣,接收操作時會自動分配緩衝區,而發送操作時的緩衝區長度則是隱含的。
也參考
socketserver模組簡化編寫網路伺服器的類別。
ssl模組對 socket 物件的 TLS/SSL 的包裝器 (wrapper)。
Socket 系列家族¶
Depending on the system and the build options, various socket families are supported by this module.
The address format required by a particular socket object is automatically selected based on the address family specified when the socket object was created. Socket addresses are represented as follows:
The address of an
AF_UNIXsocket bound to a file system node is represented as a string, using the file system encoding and the'surrogateescape'error handler (see PEP 383). An address in Linux's abstract namespace is returned as a bytes-like object with an initial null byte; note that sockets in this namespace can communicate with normal file system sockets, so programs intended to run on Linux may need to deal with both types of address. A string or bytes-like object can be used for either type of address when passing it as an argument.在 3.3 版的變更: Previously,
AF_UNIXsocket paths were assumed to use UTF-8 encoding.在 3.5 版的變更: Writable bytes-like object is now accepted.
A pair
(host, port)is used for theAF_INETaddress family, where host is a string representing either a hostname in internet domain notation like'daring.cwi.nl'or an IPv4 address like'100.50.200.5', and port is an integer.For IPv4 addresses, two special forms are accepted instead of a host address:
''representsINADDR_ANY, which is used to bind to all interfaces, and the string'<broadcast>'representsINADDR_BROADCAST. This behavior is not compatible with IPv6, therefore, you may want to avoid these if you intend to support IPv6 with your Python programs.
For
AF_INET6address family, a four-tuple(host, port, flowinfo, scope_id)is used, where flowinfo and scope_id represent thesin6_flowinfoandsin6_scope_idmembers instruct sockaddr_in6in C. Forsocketmodule methods, flowinfo and scope_id can be omitted just for backward compatibility. Note, however, omission of scope_id can cause problems in manipulating scoped IPv6 addresses.在 3.7 版的變更: For multicast addresses (with scope_id meaningful) address may not contain
%scope_id(orzone id) part. This information is superfluous and may be safely omitted (recommended).AF_NETLINKsocket 會以成對的(pid, groups)來表示。Linux-only support for TIPC is available using the
AF_TIPCaddress family. TIPC is an open, non-IP based networked protocol designed for use in clustered computer environments. Addresses are represented by a tuple, and the fields depend on the address type. The general tuple form is(addr_type, v1, v2, v3 [, scope]), where:addr_type is one of
TIPC_ADDR_NAMESEQ,TIPC_ADDR_NAME, orTIPC_ADDR_ID.scope is one of
TIPC_ZONE_SCOPE,TIPC_CLUSTER_SCOPE, andTIPC_NODE_SCOPE.If addr_type is
TIPC_ADDR_NAME, then v1 is the server type, v2 is the port identifier, and v3 should be 0.If addr_type is
TIPC_ADDR_NAMESEQ, then v1 is the server type, v2 is the lower port number, and v3 is the upper port number.If addr_type is
TIPC_ADDR_ID, then v1 is the node, v2 is the reference, and v3 should be set to 0.
A tuple
(interface, )is used for theAF_CANaddress family, where interface is a string representing a network interface name like'can0'. The network interface name''can be used to receive packets from all network interfaces of this family.CAN_ISOTPprotocol requires a tuple(interface, rx_addr, tx_addr)where both additional parameters are unsigned long integer that represent a CAN identifier (standard or extended).CAN_J1939protocol requires a tuple(interface, name, pgn, addr)where additional parameters are 64-bit unsigned integer representing the ECU name, a 32-bit unsigned integer representing the Parameter Group Number (PGN), and an 8-bit integer representing the address.
A string or a tuple
(id, unit)is used for theSYSPROTO_CONTROLprotocol of thePF_SYSTEMfamily. The string is the name of a kernel control using a dynamically assigned ID. The tuple can be used if ID and unit number of the kernel control are known or if a registered ID is used.在 3.3 版被加入.
AF_BLUETOOTHsupports the following protocols and address formats:BTPROTO_L2CAPaccepts a tuple(bdaddr, psm[, cid[, bdaddr_type]])where: