Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Как правильно выйти с программы (С++)  (Прочитано 769 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Vlad.V

  • Автор темы
  • Активист
  • *
  • Сообщений: 478
    • Просмотр профиля
Всем доброе время суток! Начал разбираться с сокетами, столкнулся с проблемой выхода из программы во время того, когда сервер ожидает подключения.

Программа работает в постоянном цикле "while(cycle)" до тех пор, пока cycle = true. При получении сигналов
    signal(SIGTERM, &prog_close);
    signal(SIGKILL, &prog_close);
    signal(SIGINT, &prog_close);

запускается функция в которой, кроме прочего, значение cycle становится равным false, соответственно цикл завершается, программа закрывается. Но если получен сигнал во время того, когда сокет сервер ждет подключения клиента (в этот момент программа замирает), то и выход из цикла происходит только после подключния клиента, а если этого подключения не будет?

Придумал другой вариант, делаю fork() и в дочерней программе работаю с клиентами используя "while(true)", а родительская программа, в свою очередь, в цикле while(cycle) ожидает сигналов. Если получен сигнал, основная программа закрывает дочернюю и закрывается сама, все работает, вот только мне кажется что есть более элегантное решение данной задачи. Т.к. новичок, может кто-то подскажет красивое решение?

Спасибо!

P.S.: O_NONBLOCK - не вариант.
« Последнее редактирование: 24 Января 2016, 15:09:16 от Vlad.V »

Оффлайн Peter_I

  • Старожил
  • *
  • Сообщений: 3026
    • Просмотр профиля
Re: Как правильно выйти с программы (С++)
« Ответ #1 : 24 Января 2016, 18:11:59 »
А что, нельзя в этой вызываемой функции вызвать exit(0)?
Или запускать программу с сервером в отдельном потоке,
а в главном, как и сейчас, ожидать сигнала.
Пётр.

Оффлайн Vlad.V

  • Автор темы
  • Активист
  • *
  • Сообщений: 478
    • Просмотр профиля
Re: Как правильно выйти с программы (С++)
« Ответ #2 : 24 Января 2016, 19:45:00 »
Можно, я так и делаю. Хотел просто узнать насколько это правильный вариант?

Оффлайн Peter_I

  • Старожил
  • *
  • Сообщений: 3026
    • Просмотр профиля
Re: Как правильно выйти с программы (С++)
« Ответ #3 : 24 Января 2016, 22:45:55 »
Ну ещё можно было бы сбрасывать флаг, а потом закрывать сокет сервера.
Пётр.

Оффлайн Vlad.V

  • Автор темы
  • Активист
  • *
  • Сообщений: 478
    • Просмотр профиля
Re: Как правильно выйти с программы (С++)
« Ответ #4 : 24 Января 2016, 22:54:30 »
Ну ещё можно было бы сбрасывать флаг, а потом закрывать сокет сервера.
Можно подробнее, о каком флаге идет речь?

Оффлайн Peter_I

  • Старожил
  • *
  • Сообщений: 3026
    • Просмотр профиля
Re: Как правильно выйти с программы (С++)
« Ответ #5 : 24 Января 2016, 23:04:19 »
cycle
Пётр.

Оффлайн Vlad.V

  • Автор темы
  • Активист
  • *
  • Сообщений: 478
    • Просмотр профиля
Re: Как правильно выйти с программы (С++)
« Ответ #6 : 24 Января 2016, 23:05:24 »

 

Страница сгенерирована за 0.102 секунд. Запросов: 25.