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


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

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

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

Оффлайн Vlad.V

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

Оффлайн Peter_I

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

Оффлайн Vlad.V

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

Оффлайн Peter_I

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

Оффлайн Vlad.V

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

 

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