Отправка файловых дескрипторов из Unix Sockets - PullRequest
0 голосов
/ 23 октября 2019

Я использую функцию Linux sendmsg () для отправки дескриптора файла другому процессу через сокет Unix вместе с некоторой полезной нагрузкой данных. Я делаю несколько звонков на sendmsg. В сопутствующем вызове recvmsg () внутри целевого процесса я получаю дескриптор файла, используя что-то вроде «fdptr = (int *) CMSG_DATA (cmsg); memcpy (fdptr, myfds, NUM_FD * sizeof (int));»Что я замечаю, что каждый раз, когда я смотрю на дескриптор файла, дескриптор файла все же является РАЗНЫМ числом, чем это было в предыдущем вызове recvmsg ().

Мой вопрос: действительно ли процесс назначения удерживает открытую группуоткрытых дескрипторов к тому же файлу / оборудованию ?? Нужно ли закрывать дескрипторы?

Что бы произошло, если бы я не попытался скопировать дескриптор с помощью "memcpy (fdptr, myfds, NUM_FD * sizeof (int));"и, по сути, «оставил это внутри» CMSG_DATA (cmsg)? Будет ли там какой-нибудь дескриптор с неизвестным номером? Если бы я не скопировал его, я бы никогда не увидел, что это, по сути, еще один номер дескриптора.

...