En Windows, un socket es un enlace entre un punto final de comunicaciones y un proceso. Es por eso que, cuando duplica un socket, termina con dos sockets pero solo un punto final. Es por eso que no puede pasar un socket de un proceso a otro sin crear un nuevo socket en el otro proceso.
Si el proceso deja de existir, sus enchufes necesariamente dejan de existir. No existe un concepto de socket sin un proceso para mantenerlo. Esta es la razón por la que incluso los controladores de kernel de Windows que desean crear sockets a nivel de kernel deben especificar un proceso para ser el propietario del socket o llamar a la función desde un contexto de proceso que pueda ser el propietario del socket. (O pueden manipular los puntos finales directamente sin usar sockets).
Su pregunta parece no ser realmente sobre sockets sino sobre los puntos finales de comunicación en sí mismos. Un socket tiene una referencia a su punto final de comunicación. Cuando el zócalo desaparece, el recuento de referencia cae. Si llega a cero, se eliminará tan pronto como sea permitido, dados los requisitos del protocolo de comunicación con el que está asociado el punto final. TCP tiene un estado TIME_WAIT durante el cual el punto final debe mantenerse para manejar cualquier paquete "sobrante".