Как создается «несколько дескрипторов файлов ссылаются на один и тот же сокет»?

Сawk:

LABELS='name_of_label_1 name_of_label_2...' awk '
  BEGIN{split(ENVIRON["LABELS"], label)}
  {
    for (i = 1; i <= NF; i++)
      print "# TYPE", label[i], "counter\n"label[i], $i
  }' < input-file
0
24.11.2020, 21:59
1 ответ

Простой ответ заключается в том, чтобы помнить, что файловый дескриптор — это просто ссылка на фактический сокет, и вы можете иметь несколько файловых дескрипторов, ссылающихся на один и тот же сокет. Подсчет ссылок используется для завершения сокета при удалении последней ссылки.

Итак, да, вы можете dup(2)дескриптор файла сокета.

Более подробное объяснение заключается в том, что файловый дескриптор — это просто дескриптор пространства пользователя для индексного дескриптора ядра. Ядро struct inodeимеет указатель на ядро ​​struct socket, которое является более высоким -уровнем, общим интерфейсом сокета.Эта структура будет иметь указатель на более низкий -уровень struct sock, который является фактическим сокетом tcp/ip. Помните, что у вас могут быть сокеты для других семейств адресов. Обратите внимание, это объяснение все еще несколько упрощено.

Отвечая на ваш последний вопрос, оба определения верны в отношении цитаты.

Этот пост в блоге на самом деле довольно хорошо объясняет часть процесса создания сокета и выделения файлового дескриптора:https://ops.tips/blog/how-linux-creates-sockets/

2
18.03.2021, 22:47

Теги

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