Как я должен закрыть сокет в обработчике сигналов?

Надежное решение этой проблемы - использование Google Dataflow. В настоящее время я использую его именно для этого, создавая CSV-файлы в облачном хранилище Google, которые содержат все ~ 500 тыс. Записей, соответствующих данному запросу хранилища данных.

Настройка может быть немного сложна.

Перед тем, как начать, я использовал Google Task Queue, который имеет 10-минутный тайм-аут вместо 30-секундного. Я не уверен, можете ли вы сделать это исключительно в облачных функциях или вам нужно создать простой проект движка приложения, который будет выполнять функции обработчика запросов для этих задач

8
задан Greg Hewgill 16 January 2009 в 06:02
поделиться

2 ответа

Ну, так как у Вас есть обработчики сигналов, я собираюсь предположить, что Вы находитесь на варианте Unix. Раз так:

  • Сокет определяется к ядру номером документа, который является интервалом. Посмотрите socket(2).
  • Тот интервал допустим для Вашего процесса
  • Тот интервал допустим для любых процессов, разветвленных после создания его
  • Если не замыкаться-должностное-лицо, это допустимо для какого-либо процесса Вы должностное лицо.

Так, это совершенно допустимо в Вашем обработчике сигналов. Как Вы делаете свой обработчик сигналов, знающий, какое число использовать зависит от языка, Вы пишете в, который Вы не указывали. Существует два подхода, которые будут работать на в значительной степени любом языке

  • Если у Вас нет очистки, чтобы сделать кроме close и выход, просто назовите выход. Или устанавливает действие сигнала для установки по умолчанию, который является выходом. Ядро закроет сокеты.
  • Установите флаг (который обычно будет глобальным каким-то) сказать Вашему циклу выбора/опроса мыться и выходить. Выгодный в этом Вы не должны волноваться о том, если различные части Вашей программы безопасно назвать от обработчика сигналов.
8
ответ дан 5 December 2019 в 09:26
поделиться

Обычно, желательно не сделать что-либо очень в обработчике сигналов; кроме набора флаг.

Затем, когда управление возвращается к Вашему основному циклу, можно исследовать этот флаг, выйти из цикла, близких сокетов, выполнить деструкторы на объектах и т.д. и выйти чисто.

В обработчики сигналов можно зайти почти любое время, включая посреди C или вызовов библиотеки C++, которые могли быть проблемой.

10
ответ дан 5 December 2019 в 09:26
поделиться
Другие вопросы по тегам:

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