用法:
socket.recvmsg(bufsize[, ancbufsize[, flags]])
从套接字接收正常数据(最多
bufsize
字节)和辅助数据。ancbufsize
参数设置用于接收辅助数据的内部缓冲区的大小(以字节为单位);它默认为 0,这意味着不会接收到辅助数据。可以使用CMSG_SPACE()
或CMSG_LEN()
计算辅助数据的适当缓冲区大小,不适合缓冲区的项目可能会被截断或丢弃。flags
参数默认为 0,其含义与recv()
相同。返回值是一个 4 元组:
(data, ancdata, msg_flags, address)
。data
项目是一个bytes
对象,用于保存接收到的非辅助数据。ancdata
项是零个或多个元组的列表(cmsg_level, cmsg_type, cmsg_data)
表示接收到的辅助数据(控制消息):cmsg_level
和cmsg_type
是分别指定协议级别和协议特定类型的整数,而cmsg_data
是一个保存相关数据的bytes
对象。msg_flags
项是表示接收消息条件的各种标志的按位或;有关详细信息,请参阅您的系统文档。如果接收套接字未连接,address
是发送套接字的地址,如果有的话;否则,它的值是未指定的。在某些系统上,socket.socket.sendmsg和socket.socket.recvmsg可用于在进程之间通过
AF_UNIX
插座。使用此设施时(通常仅限于SOCK_STREAM
插座),socket.socket.recvmsg将在其辅助数据中返回表单项(socket.SOL_SOCKET, socket.SCM_RIGHTS, fds)
,其中fds
是一个bytes
将新文件说明符表示为原生 C 的二进制数组的对象int类型。如果socket.socket.recvmsg在系统调用返回后引发异常,它将首先尝试关闭通过此机制接收到的任何文件说明符。一些系统不指示仅部分接收的辅助数据项的截断长度。如果一个项目似乎超出了缓冲区的末尾,
recvmsg()
将发出RuntimeWarning
,并将返回它在缓冲区内的部分,前提是它在相关数据开始之前没有被截断。在支持
SCM_RIGHTS
机制的系统上,以下函数将接收最多maxfds
文件说明符,返回消息数据和包含说明符的列表(同时忽略意外情况,例如收到不相关的控制消息)。另见sendmsg()
。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 平台,可能还有其他平台。
3.3 版中的新函数。
在 3.5 版中更改:如果系统调用被中断并且信号处理程序没有引发异常,则该方法现在重试系统调用而不是引发
InterruptedError
例外(见PEP 475理由)。
相关用法
- Python socket.socket.recvmsg_into用法及代码示例
- Python socket.socket.sendmsg用法及代码示例
- Python socket.create_server用法及代码示例
- Python socket.getaddrinfo用法及代码示例
- Python sorted()用法及代码示例
- Python sort()用法及代码示例
- Python sorted()和sort()用法及代码示例
- Python sklearn.cluster.MiniBatchKMeans用法及代码示例
- Python scipy.ndimage.binary_opening用法及代码示例
- Python scipy.signal.windows.tukey用法及代码示例
- Python scipy.stats.mood用法及代码示例
- Python str.isidentifier用法及代码示例
- Python sklearn.metrics.fbeta_score用法及代码示例
- Python scipy.fft.ihfftn用法及代码示例
- Python scipy.stats.normaltest用法及代码示例
- Python scipy.ndimage.convolve1d用法及代码示例
- Python scipy.stats.arcsine用法及代码示例
- Python scipy.interpolate.UnivariateSpline.antiderivative用法及代码示例
- Python scipy.linalg.hadamard用法及代码示例
- Python sklearn.linear_model.PassiveAggressiveRegressor用法及代码示例
注:本文由纯净天空筛选整理自python.org大神的英文原创作品 socket.socket.recvmsg。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。