Menerima data normal (hingga ukuran byte) dan data tambahan dari soket. Argumen ancbufsize menetapkan ukuran buffer internal dalam byte yang digunakan untuk menerima data tambahan; defaultnya adalah 0, artinya tidak ada data tambahan yang akan diterima. Ukuran buffer yang sesuai untuk data tambahan dapat dihitung menggunakan CMSG_SPACE() atau CMSG_LEN(), dan item yang tidak sesuai dengan buffer mungkin akan dipotong atau dibuang. Argumen flags defaultnya adalah 0 dan memiliki arti yang sama seperti untuk recv().
socket.recvmsg(bufsize[, ancbufsize[, flags]])
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)