Python 3.9+Linux · macOSsocketфункция
socket.recv_fds()
дескрипторы и служебные данные
Принимает из сокета AF_UNIX данные и до maxfds файловых дескрипторов: (msg, fds, flags, addr).
Синтаксис
msg, fds, flags, addr = socket.recv_fds(sock, bufsize, maxfds, flags=0)
Полученные дескрипторы — новые номера в вашем процессе, и закрывать их обязаны вы, иначе они утекают. Если отправлено больше, чем maxfds, лишние отбрасываются, а в flags появляется MSG_CTRUNC — проверяйте его. Как и recv, данные приходят не обязательно целиком: bufsize — верхняя граница, а не обещание.
Примеры
import os, socket
r1, w1 = os.pipe()
r2, w2 = os.pipe()
a, b = socket.socketpair()
with a, b:
socket.send_fds(a, [b'x'], [w1, w2])
msg, fds, flags, addr = socket.recv_fds(b, 16, 1)
print(len(fds)) # → 1
print(bool(flags & socket.MSG_CTRUNC)) # → True — второй дескриптор потерян
for fd in [r1, w1, r2, w2, *fds]:
os.close(fd)
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности