У Windows сокет - це зв'язок між кінцевою точкою зв'язку та процесом. Ось чому, коли ви дублюєте розетку, ви закінчуєтесь двома розетками, але лише однією кінцевою точкою. Ось чому ви не можете передавати сокет з одного процесу в інший, не створюючи нового сокета в іншому процесі.
Якщо процес припиняє своє існування, його розетки обов'язково припиняють своє існування. Не існує концепції розетки без процесу її утримання. Ось чому навіть драйвери ядра Windows, які бажають створити сокети на рівні ядра, повинні вказати процес для володіння сокетом або виклик функції з контексту процесу, який може володіти сокетом. (Або вони можуть маніпулювати кінцевими точками безпосередньо, не використовуючи розетки.)
Здається, ваше питання стосується не розеток, а самих кінцевих точок зв'язку. Розетка має посилання на свою кінцеву точку зв'язку. Коли розетка згасає, контрольна кількість падає. Якщо він досягне нуля, він буде видалений, як тільки це допустимо, враховуючи вимоги протоколу зв'язку, з яким пов'язана кінцева точка. TCP має стан TIME_WAIT, протягом якого кінцеву точку потрібно тримати навколо, щоб обробляти будь-які пакети, що залишилися.