用法:
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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。