2014-09-08 1 views
1

Есть ли способ сохранить «состояние» Winsock, чтобы можно было остановить и перезапустить серверную программу, и все клиентские TCP-соединения продолжаются, как будто ничего не произошло, без необходимости делать что-то особенное?Может ли соединение Winsock TCP между сервером и клиентом возобновляться как было после перезапуска сервера?

Или это так, что как только процесс сервера Winsock завершается, клиентские соединения могут быть восстановлены только при всех обычных вызовах инициализации?

ответ

1

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

+0

Это возможно. Это было сделано раньше. Это просто очень много работы, и, насколько мне известно, никто не беспокоился об этом в Windows. –

+0

Я никогда не слышал, чтобы кто-то делал это в любой системе, не говоря уже о Windows. Существуют API для запроса активных подключений ('GetTcpTable()' и т. Д.), Но AFAIK нет API-интерфейсов для создания настраиваемых соединений. Даже если бы вы могли, порядковые номера и т. Д., Скорее всего, не синхронизированы. –

+1

В принципе, по крайней мере, я думаю, что должно быть возможно запустить временный процесс, используйте WSADuplicateSocket для создания копии сокетов во временном процессе, перезапустите сервер, а затем снова используйте WSADuplicateSocket, чтобы скопировать сокеты в новый экземпляр сервер. –

Смежные вопросы