
paulo1205
(usa Ubuntu)
Enviado em 24/01/2019 - 02:25h
vzxf escreveu:
Tenho aqui comigo algumas questões em relação a função shutdown() e gostaria de compartilhar com vocês e também obter algumas respostas. Aqui vão elas:
1. Faz sentido usar shutdown() em conexões não full-duplex (exemplo: half-duplex)?
shutdown() com a opção
SHUT_WR é para indicar par o outro lado que você não tem mais nada a transmitir. Essa informação pode ser útil tanto numa comunicação seja
full-duplex quanto numa que seja
half-duplex.
Já a opção
SHUT_RD não informa nada ao outro lado do
socket, mas simplesmente faz com que o sistema operacional não reencaminhe para a sua aplicação dados que a outra ponta venha a mandar. O fluxo de pacotes recebidos e ACKs devolvidos na rede (supondo que você está usando TCP) continua normalmente, mas não afetam mais a sua aplicação (a não ser que chegue um dado
out-of-band, que não é afetado pelo
shutdown()).
2. Por que deveria usar o valor SHUT_RDWR no parâmetro int how da função shutdown() quando simplismente poderia usar somente a função close()?
Você não precisa usar, pode realmente usar apenas
close(). Contudo, se o outro lado ainda tiver conteúdo a mandar, e você fechar o
socket, ele vai receber um erro de conexão resetada. Se ambos os lados saírem com
shutdown (ou pelo menos chamarem
close de modo coordenado), a tendência é que a conexão se feche de modo mais “limpo”.
3. A função shutdown() deve ser usada antes ou depois da função close()?
Antes. Depois do
close() o
socket não existirá mais, logo nenhuma operação sobre ele será válida.
Se for responder algo que não convém com a dúvida do tópico ... SE MANDAAAA!
Melhor do que censurar outrem a priori num espaço público é ignorar o que porventura não lhe interessar.
... “Principium sapientiae timor Domini, et scientia sanctorum prudentia.” (Proverbia 9:10)