- Sim, é um trabalho do programador.
- Sim, vazamento de memória pode causar isso. A questão é se o soquete não foi fechado explicitamente só fecha quando a instância de um soquete ou outra classe derivada é destruído . Isso é feito por coleta de lixo automaticamente, mas não destruirá a instância de uma classe se houver pelo menos uma referência em algum lugar (vazamento de memória).
Pode ser bastante complicado descobrir o que mantém referências a instâncias e causa vazamento de memória. Pode ser segmentos que ainda estão em execução e manter referências em suas variáveis locais. Pode ser algum tipo de array usado para rastrear todas as conexões. Existem muitas possibilidades e todas dependem da implementação.