Python Glossary English

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Сообщить о неточности