
paulo1205
(usa Ubuntu)
Enviado em 17/07/2015 - 15:35h
XProtoman escreveu:
O problema trazendo para sockets é que por exemplo em algum momento posso desconectar um cliente, o jeito mais fácil seria cancelar a thread do cliente porém nesse teste cancelar não libera todos os recursos. Usando isso para outras coisas também não é uma boa opção aparentemente cancelar.
Nos meus parcos testes, usar RAII (i.e. envelopar gestão de recursos em objetos, para que a chamada do destrutor libere recursos) foi suficiente para não perder recursos. Como mostrei nos testes acima, não vazou a memória de
std::vector, nem o descritor (lembre-se que um socket é um descritor) envelopado pela minha
raii_fd.
Apesar de extremamente simples, eu não posso ceder a
raii_fd (desenvolvi para o meu empregador, logo não é minha
de jure, ainda que seja
de facto), mas você possivelmente consegue o mesmo efeito (de RAII; em termos de complexidade, nem se compara!) se envelopar o socket com, por exemplo,
__gnu_cxx::stdio_filebuf<char>.
Sugiro que você faça testes especificamente com sockets devidamente encapsulados com RAII e veja o que o strace lhe mostra.