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