В irda-utils-0.9.16/irattach/irattach.c есть следующий код: if (ioctl(ttyfd, TIOCSETD, &irdadisc) < 0){ fprintf(stderr, "Maybe you don't have IrDA support in your kernel?\n"); syslog(LOG_ERR, "irattach: tty: set_disc(%d): %s\n", irdadisc, strerror(errno)); clean_exit(-1); } Если вызов TIOCSETD завершается с ошибкой (например, в случае проблем с загрузкой модуля irtty_sir), сообщение об этом должно писаться в syslog - оно туда и записывается, но с неверным кодом ошибки: irattach: tty: set_disc(11): Bad file descriptor Т.е., создаётся впечатление, что вызов TIOCSETD вернул в errno код ошибки EBADF, хотя strace показывает другую ситуацию: ioctl(3, TIOCSETD, [11]) = -1 EINVAL (Invalid argument) write(2, "Maybe you don\'t have IrDA suppor"..., 50) = -1 EBADF (Bad file descriptor) Дело в том, что ещё раньше irattach вызывает fork_now(), где в том числе закрываются все открытые ранее файловые дескрипторы, в том числе и stdin/stdout/stderr. Поэтому fprintf(stderr, ...) завершается с ошибкой, и этот код ошибки затирает код, полученный ранее от TIOCSETD. Вообще закрытие дескрипторов 0, 1, 2 чревато странными проблемами; обычно в подобных случаях открывают /dev/null (см., например, man 3 daemon).
А можно патчик для тупых новых майнтейнеров? :)
Найти ничего готового не вышло, читать daemon() чуточку выходит за рамки намеченного на ближайшие три месяца... попросил в sisyphus@, кому нетрудно.
запись в stderr наверное оставлена для тех случаев. когда сервер запускается с отладкой, и stderr не закрывается. Перестановка строчек syslog и fprintf должна решить проблему.
Created attachment 1615 [details] irda-utils-0.9.16-alt-irattach-daemonize.patch - irattach: daemonize properly: + close fds up to sysconf(_SC_OPEN_MAX) instead of hardcoded 64; + redirect stdin/out/err to /dev/null instead of leaving them closed (#6257).
Мужыки EBADF получился из-за fprintf(stderr), если fd=2 уже закрыт. Переставьте syslog и fprintf местами либо сохраняйте errno. man errno |col -b |grep -A33 ^NOTES
Кстати у syslog() есть формат %m.
Да уже приложил приложенное. Надо в апстрим закинуть вместе с твоей/Lost's рекомендацией.
Учтено в 0.9.16-alt3 и закинуто в апстрим: http://sourceforge.net/tracker/index.php?func=detail&aid=1551560&group_id=5616&atid=305616 Всем спасибо :-)