Python Glossary English

Python 3.9+Linux · macOSsocketфункция

socket.send_fds()

дескрипторы и служебные данные

Передаёт другому процессу открытые файловые дескрипторы через сокет AF_UNIX вместе с обычными данными.

Синтаксис

socket.send_fds(sock, buffers, fds, flags=0, address=None) -> int

Передаётся не число, а сам открытый файл: получатель увидит другой номер дескриптора, указывающий на тот же объект ядра. Отправитель свои дескрипторы после этого закрывает сам — функция их не закрывает. Список buffers не должен быть пустым: без хотя бы одного байта данных служебные данные на некоторых системах не доходят. Работает только на Unix и только для AF_UNIX.

Примеры

import os, socket
r, w = os.pipe()
a, b = socket.socketpair()
with a, b:
    socket.send_fds(a, [b'pipe'], [w])
    msg, fds, flags, addr = socket.recv_fds(b, 1024, 1)
    print(msg, len(fds))  # → b'pipe' 1
    os.write(fds[0], b'ok')
    print(os.read(r, 2))  # → b'ok'
    for fd in [r, w, *fds]:
        os.close(fd)

См. также

Частые ошибки

Открыть в полном глоссарииdocs.python.orgСообщить о неточности