[Comm] Не открывается порт

Dmitry Chistikov dd1email на gmail.com
Сб Фев 4 14:52:55 MSK 2012


Vladimir Karpinsky, Feb. 04, 2012, 14:02 +0400:
> Ведёт, но там про это ничего нет. Появляется строка, что клиент запросил 
> данные, и падение.

Какой-нибудь debug level увеличить не получается?

> В выводе strace достаточно много раз присутствует такого вида строки:
> 13841 access(0xfffffffff77cf6fa, R_OK)  = -1 ENOENT (No such file or directory)
> ...
> 13841 stat64(0xffffffffffa882e3, 0xffffffffffa871b4) = -1 ENOENT (No such 
> file or directory)

Если поглядеть в access(2) и stat(2), то первый параметр у этих вызовов
const char *. Если Вы специально не подкручивали strace на такой формат
вывода, то, скорее всего, соответствующий указатель смотрит куда-то не
туда. Неплохо бы понять, почему так получилось.

На чем эта штука написана? Иногда может оказаться полезным ltrace (library
call tracer).

> 13841 socket(PF_UNSPEC, 0, 0)           = 4
> 13841 connect(0, NULL, 0)               = -1 ENOENT (No such file or directory)
> 
> Можно ли как-то вычислить о каком "such file or directory" идёт речь?

Не могу ответить уверенно.

Обратите внимание, что socket возвращает файловый дескриптор (в данном
случае это 4), а connect принимает файловый дескриптор в качестве первого
параметра (в данном случае это 0). Таким образом, в этих строках речь
о разном.

Страница connect(3p) указывает, что для unix-сокетов (AF_UNIX) ситуация
ENOENT возникает в случае, если по указанному пути, грубо говоря, нельзя
пройти ("A component of the pathname does not name an existing file or the
pathname is an empty string"). Попробуйте изучить историю нулевого
дескриптора, скормленного connect'у, до этого вызова.

> Есть ещё такие:
> 13842 stat64("/usr/nrts/vyb/meta", 0xffffffffffa89144) = -1 ENOENT (No such 
> file or directory)
> 
> Файла meta не существует и не должно быть. В работающей программе под ядром 
> 2.4 так:
> 23326 stat64("/usr/nrts/vyb/meta",  <unfinished ...>
> 23328 <... rt_sigaction resumed> NULL, 8) = 0
> 23326 <... stat64 resumed> 0xbffff374)  = -1 ENOENT (No such file or directory)
> 23328 rt_sigaction(SIGRT_15, {0x1778f0, ~[], SA_RESTORER, 0x1e5958}, 
> <unfinished ...>
> 
> То же про отсутствие файлов есть, но не так.

По-моему, одно и то же. (Опять же могу ошибаться.)

> Кончается всё сегфлотом: [...]

Надо понять, в какой момент крышу начинает сносить.

> Собственно главный вопрос --- не изменились ли какие-нибудь правила (при 
> переходах: веток 4 -> p6, ядер 2.* -> 3.*, и архитектуры i586 -> x86_64) в 
> смысле прав на открытие портов и т.п. Если всё должно работать по-прежнему, 
> то надо разбираться с разработчиками, но этот процесс увы не так прост...

Правила - понятие широкое.

Программа, конечно, должна адекватно отслеживать возможные ошибки, но это
общезначимо и совсем не новость. Сложно сказать, на что именно программа
ошибочно подвязалась (если).

-- 
Дмитрий Чистиков


Подробная информация о списке рассылки community