Вам нужно будет сообщить о потере клиентского TCP-соединения на стороне сервера через ваш UDP-туннель (и наоборот, если сервер должен сначала закрыть соединение).
В противном случае, помимо того, что HTTP-сервер не знает, что клиент отключился, вы будете пропускать соединения на стороне, которая не инициировала закрытие соединения.
Один из способов сделать это - зарезервировать специальное значение вашего 32-битного поля идентификатора соединения - скажем, 0x00000000
или 0xffffffff
- как представление контрольного пакета, а не данных соединения. Далее следует еще одно 4-байтовое поле, представляющее идентификатор соединения, а за ним - поле кода операции. Первый код операции, который вы можете определить, это «Соединение разорвано».
- Если ваша клиентская часть туннеля обнаруживает, что клиентское приложение закрыло свое TCP-соединение, она отправляет пакет с завершением соединения для соответствующего идентификатора соединения через туннель;
- Если ваша клиентская часть туннеля получает код операции «Соединение разорвано» со стороны сервера, то она закрывает соединение с клиентским приложением;
и аналогичные для серверной части туннеля.