Chamando close
e shutdown
tem dois efeitos diferentes no soquete subjacente.
A primeira coisa a salientar é que o soquete é um recurso no SO subjacente e vários processos podem ter um identificador para o mesmo soquete subjacente.
Quando você o chama close
, diminui a contagem de identificadores em um e se a contagem de identificadores atingiu zero, o soquete e a conexão associada passam pelo procedimento de fechamento normal (enviando efetivamente um FIN / EOF para o par) e o soquete é desalocado.
O que devemos prestar atenção aqui é que, se a contagem de identificadores não atingir zero, porque outro processo ainda possui um identificador no soquete, a conexão não será fechada e o soquete não será desalocado.
Por outro lado, solicitar shutdown
leitura e gravação fecha a conexão subjacente e envia um FIN / EOF para o par, independentemente de quantos processos possuam identificadores para o soquete. No entanto, ele não desaloca o soquete e você ainda precisa ligar mais tarde.
shutdown()
faz :)