Структура должна иметь дескриптор соединения (SOCKET), счетчик ссылок и флаг, обозначающий, что соединение должно быть закрыто, а объект удален как можно скорее.Каким бы ни был контейнер, он должен иметь механизм синхронизации (критический раздел) для поиска / вставки / удаления и логику GetReference / Release.Функция GetReference должна возвращать NULL, если установлен флаг закрытия.Вам может потребоваться более одного GetReference, в зависимости от условий поиска (а объект соединения должен иметь все те значения, которые могут помочь его обнаружению в контейнере).Одна из функций GetReference может создавать новый объект, если он не существует в контейнере.
Функция освобождения должна закрывать соединение и удалять объект из контейнера, если установлен флаг закрытия и счетчик ссылок сброшен до нуля.Однако версия не должна закрывать соединение в критической секции, потому что это может занять много времени (зависит от постепенного отключения и длительной опции ).Release должен ввести CS, уменьшить количество ссылок, если он равен нулю, затем выйти из CS, закрыть соединение, снова ввести CS, удалить объект из контейнера и удалить его.Поскольку флаг закрытия поднимается, счетчик ссылок не будет повышаться между двумя CS.