Acep () método e handshake de tcp/ip
-
21-09-2019 - |
Pergunta
Eu uso a classe Java ServerSocket para aplicativo do servidor. O método aceita () participa do handshake de TCP/IP?
Como vejo no TCP/IP Dump e no Command NetStat, os clientes estabelecem conexões com o método antes da aceitação é chamado e o objeto de retorno do soquete.
É um problema de java, ou eu não entendo a semântica aceita ()?
Solução
Geralmente no UNIX, se você marcar o soquete com Listen (), o sistema operacional começa a aceitar as conexões. Quando você chama a função aceit (), o sistema operacional simplesmente entrega a conexão já aberta. Ouvir, leva um parâmetro que permite especificar quantas conexões abertas 'não aceitas' o sistema operacional permite (ou seja, o tamanho da fila).
Outras dicas
o accept
O método não participa ativamente do aperto de mão, por si só. O envio e o recebimento das mensagens são implementados na pilha de protocolos TCP/IP, normalmente no espaço do kernel do sistema operacional.
No entanto, o accept()
o método está envolvido no sentido de que a pilha TCP/IP enviará apenas a mensagem Syn-ACK se algum processo tiver um accept()
Ligue para ativo para obter um soquete limitado com o endereço IP e a porta relevantes. Quando o aperto de mão de três vias é concluído, o accept()
A chamada do método será concluída.
Se nenhuma chamada de processo accept()
Com o tempo, a mensagem SYN recebida será descartada pelo kernel e o cliente remoto acabará por diminuir a tentativa de conexão. (Por outro lado, se o endereço / porta IP não estiver vinculado, é provável que o kernel responda com uma primeira e o cliente remoto verá uma "conexão recusada".)
Aceite as devoluções somente depois que o cliente e o servidor estiverem conectados (handshake, etc.).