Как inetd передает управление соответствующим службам?

Вы можете использовать команду chattr +a , чтобы каталог добавлял -только на уровне файловой системы. Samba не должна отклоняться -от этого шага. См. этот вопрос:

Каково влияние «chattr +a» на каталог

0
14.03.2020, 18:41
3 ответа

inetdпрослушивает порт, а затем подключает его к stdin, stdout и stderr службы, которая будет его обрабатывать.

Как это делается

  • После acceptсоединения у него есть сокет на одном из его fds.
  • Затем он dupсвяжет fdс 0, 1и 2.
  • Тогда будет fork. Все файловые дескрипторы останутся открытыми, если не будет предпринято какое-либо действие для их закрытия (, поэтому 0,1 и 2 останутся открытыми ).
  • Затем дочерний процесс вызовет exec, fdвсе еще остаются открытыми.
  • Теперь служба работает с удаленным клиентом, подключенным к stdin (0 ), stdout (1 )и stderr (2 ).
  • Службе просто нужно знать, что клиент находится в этих файловых -дескрипторах, а не выполнять listenсвои собственные действия.

(Я немного поискал, но не вижу, чтобы inetdсообщал сервисной программе, что она была вызвана inetd. Я бы ожидал аргумент командной строки.)

1
28.04.2021, 23:20

Это подробно объяснено в Que -Linux -Socket -Programming в разделеThe Design Parameters of inetd Servers

0
28.04.2021, 23:20

Рассмотрим подобные действия:

[родительский]

sfd = socket(), listen(), connect(), fork();

Для других дескрипторов, которые не должны наследоваться дочерними процессами, close()или предварительно установить их на FD_CLOEXEC;после fork, родитель может закрыть этот sfd

[ребенок]

execve();унаследована копия дескриптора подключенного сокета, которую можно использовать для клиентского ввода-вывода

-1
28.04.2021, 23:20

Теги

Похожие вопросы