Получить индекс для поиска в / proc / net / udp - PullRequest
0 голосов
/ 26 сентября 2019

Я пытаюсь программно отследить объем данных в моем приемном буфере.Я получаю данные UDP.После некоторых исследований кажется, что единственный способ сделать это в Linux - это посмотреть / proc / net / udp.Это кажется хорошим решением, пока я не осознал, что два приложения могут прослушивать одну и ту же группу многоадресной рассылки, и мне нужно разделить их.Похоже, что я должен сделать это, определив, какой у меня индекс,кажется, что функции недоступны.

Может кто-нибудь помочь мне выяснить, какая строка в / proc / net / udp принадлежит моему приложению?

Я начал использовать вызов ioctl (handle, FIONREAD, & bytesInBuffer) только для того, чтобы обнаружить, что в Linux это возвращает только размер первого пакета дейтаграммы в буфере.

Похоже, Google предлагает использовать вызов sockfd_lookup для получения inode, но grep в моем / usr / local / include / не возвращает эти функции.

Мой linux / net.Кажется, что он довольно голый по сравнению с некоторыми, которые я могу найти в Google, который включает структуры типа «сокет», в котором есть элемент sock, который, как мне кажется, содержит информацию об узле.Мой linux / net.h только для CentO имеет длину 58 строк и содержит всего #defines и enum.

1 Ответ

1 голос
/ 27 сентября 2019

после небольшого переворота я заметил, что readlink("/proc/self/fd/$fd") (под Linux 5.3) дает мне что-то вроде:

socket:[3753088]

назад.Я могу разобрать это и использовать полученные цифры, чтобы найти соответствующую строку в /proc/net/udp:

  sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode ref pointer drops             
 2867: 00000000:0BB8 00000000:0000 07 00000000:00000000 00:00000000 00000000  1000        0 3753088 2 000000003ae8e911 0       

, которая говорит, что я не понимаю, почему вы хотите сделатьэто, но не берите в голову!Я также не уверен, почему вы не просто смотрите по имени носка и пира, что может быть проще

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...