Привязать AF_UNIX к любому существующему файлу?

Наконец-то я понял, что проблема возникла из-за использования aplayвместо paplay.

Я до сих пор не могу сказать, почему aplayработает на хосте Debian, а не на целевом Linux, но, по крайней мере, вопрос закрыт.

2
15.12.2019, 01:04
1 ответ

Can we bind a Unix domain socket to any random existing file

Нет. Файл не должен существовать, иначе bind(2)завершится ошибкой с EADDRINUSE. bind(2)создаст новый файл с путем, указанным в .sun_path.

If no, how do you recognize a file that is used by a socket?

lsofможет помочь. До точки .

илиss:

$ nc -Ul foo &
[3] 9268
$ ls -i./foo
1179674./foo
$ ss -elx | grep -w 1179674
u_str LISTEN  0  5 foo 618789 * 0 <-> ino:1179674 dev:0/2072 peers:

(вывод ssвыше был вручную обрезан от пробелов)

Опция -lуказывает ssвыбирать только прослушиваемые сокеты, опция -x— только сокеты Unix, а опция -e— печатать расширенную информацию в качестве номера инода, который я использовал для соответствия файл.

И ss, и lsofбудут видеть сокеты только из текущего сетевого пространства имен ; но два сокета unix из разных сетевых пространств имен не могут быть привязаны к одному и тому же файлу.

Вы также можете проверить, совпадают ли номера устройств; но вы должны действовать осторожно, потому что sock_diag(7)(, используемый ss), вернет его в формате, используемом внутри ядра (MMMm mmmm), но ошибочный ssбудет обрабатываться так, как если бы он был в пользовательской области mmmM MMmm. формат; номер устройства в примере выше не 0/2072, а8/24(/dev/sdb8);-)

3
28.04.2021, 23:26

Теги

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