Что является семантикой получения EADDRINUSE, когда никакой сокет слушания не связывается, но соединения открыты

[112400]Правильны несколько человек. [112834]*/30[112835] не действует в колонке часа, поскольку (в любой колонке), [112836]*/n[112837] означает "все, что делится на [112838]n[112839]". Обычно это объясняется как "каждое [112840]n[112841] без разницы", но на самом деле это не так; например, если вы поместите [112842]*/5[112843] в столбец часов, скрипт будет работать в 0:00, 5:00, 10:00, 15:00 и 20:00.

  • Кроме того, столбцы не зависят друг от друга. Если вы поместите [112844]*/10[112845] в колонку часов и [112846]2,17[112847] в колонку минут, скрипт будет работать в 0:02, 0:17, 10:02, 10:17, 20:02 и 20:17.

Я не знаю простого способа запускать скрипт каждые 1830 минут. Вы могли бы использовать скрипт для изменения расписания через 1830 минут с помощью команды [112848]at[112849], но это не очень надежно.[112405].

2
14.10.2014, 14:39
1 ответ

Пока я не понимаю всю семантику (я либо смотрю в неправильном месте, или документация не хватает), я считаю, что в течение определенного времени после закрытия соединения (возможно, установлено SO_LINGER ), ни один процесс не может открыть новый сокет с той же деталями, если они не имеют SO_REUSEADDR .

Это означает, что кто-то переподключится в секунду после того, как соединение закрыто, и процесс необходимости иметь дело с пакетами, которые были предназначены для предыдущего процесса, как я его понимаю.

MAN 7 Socket не документирует это как часть SO_REUSEADDR , который сделал этот ответ трудно выяснить.

0
27.01.2020, 22:57

Теги

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