витая .loseConnection не сразу теряет связь? - PullRequest
1 голос
/ 27 декабря 2010

У меня есть сервер с несколькими клиентами, подключенными к нему.Когда нажимают CTRL + C (то есть, реактор начинает закрываться), я хочу закрыть все свои соединения, подождать, пока они не будут полностью закрыты, а затем остановиться.Я делаю это, проходя через транспорты подключенных клиентов и звоня .loseConnection().На тех, которые подключены локально, они сразу отключаются.Однако на том, который подключен через Интернет, соединение не теряется сразу.Связь прекращается - и закрытие клиентской программы больше даже не сообщает серверу о том, что соединение разорвано, хотя это происходит до вызова .loseConnection() - но соединение не считается «потерянным» до тех пор, пока через несколько минут после отправки нескольких запросов сердцебиенияс сервера.

Я понимаю, что если соединение прервется, сервер не сможет узнать, если он не попытается отправить некоторые данные.Но если я специально прошу закрыть соединение, почему оно не сразу закрывается / отключается?Я вызываю не ту функцию?

1 Ответ

1 голос
/ 28 декабря 2010

loseConnection очищает буфер записи перед отключением соединения. Если вы не хотите ждать, пока это произойдет, просто дайте реактору остановиться до того, как это произойдет. Они закроются таким образом, и все неотправленные данные в их буфере записи будут отброшены.

Также предлагается добавить API для сброса буфера записи и отключения, abortConnection .

...