Question

J'utilise la classe java ServerSocket pour l'application serveur. Accepte les méthode () participer à handshake tcp / ip?

Comme je vois dans dump tcp / ip et de la commande netstat, les clients établissent des connexions avec avant d'accepter la méthode est appelée et revenir objet Socket.

est-il question java, ou je ne comprends pas la sémantique accept ()?

Était-ce utile?

La solution

En général, dans Unix, si vous marquez la prise avec listen (), le système d'exploitation commence à accepter les connexions. Lorsque vous appelez la fonction accept (), le système d'exploitation mains tout simplement sur la connexion déjà ouverte. Écouter prend un paramètre qui vous permet de spécifier le nombre « non acceptées » connexions ouvertes le système d'exploitation permet (à savoir la taille de la file d'attente).

Autres conseils

La méthode de accept ne participe pas activement à la poignée de main, en soi. L'envoi et la réception des messages est mis en œuvre dans la pile de protocole TCP / IP, généralement dans l'espace du noyau du système d'exploitation.

Cependant, la méthode de accept() est impliqué dans le sens que la pile TCP / IP n'enverra le message SYN-ACK si un processus a un appel accept() actif pour une prise liée avec l'adresse IP concernée et le port. Lorsque la poignée de main à trois voies est terminée, l'appel de la méthode accept() complètera.

Si aucun processus appelle accept() en temps le message SYN entrant sera abandonné par le noyau et le client distant finira par se la tentative de connexion. (D'autre part, si l'adresse IP / port n'est pas lié, le noyau est susceptible de répondre à un RST et le client distant verra une « connexion refusée ».)

accepter les retours seulement après que le client et le serveur sont connectés (handshake, etc).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top