2011-12-26 1 views
2

Je crée un socket non bloquant, puis utilise le epoll pour gérer le socket. Je ne définis pas de délai d'expiration sur epoll_wait. Mais je trouve que le epoll retourné en 5s à 10s, puis je vérifie avec le getsockopt sur SO_ERROR, la connexion trouver à expirer. Pourquoi expirer en si peu de temps?Pourquoi epoll_wait(), est renvoyé et le délai de connexion TCP se termine en 5s ~ 10s

J'essaie d'utiliser des outils pour fermer les paquets TCP. Le scénario est le suivant:

Lorsque mon client envoie un SYN pour se connecter au serveur. Mais le serveur ne peut pas renvoyer le ACK en 5s à 10s. Ensuite, le retour epoll_wait. et vérifiez avec le SO_ERROR. Je reçois un EIMTEDOUT.

Je n'arrive pas à comprendre pourquoi le temps d'attente est si court en 5s à 10s. Est le problème de mon client ou est le epoll?

+0

+1 - 5-10 secs est en effet très court pour un timeout de connexion. Si le lien contenait un modem commuté, par exemple, la connexion échouerait toujours avec un délai d'attente aussi court. Je voudrais savoir pourquoi cela arrive aussi. –

+0

Je ne sais pas pourquoi. Je viens d'utiliser le libev. la description ci-dessus est exactement ce que la libev fait en C++. Je trouve juste que la libev retourne ETIMEDOUT en si peu de temps. – hyman

Répondre

0

J'ai récemment posté un similaire question Voir la réponse acceptée qui explique comment la valeur de connexion TCP est calculée par le noyau Linux. Si vous avez le client/serveur sur la même machine, il est probable qu'il aura un délai plus court valeurs. Si vous vous attendez à ce que le serveur prenne plus de temps pour accepter une connexion, vous pouvez définir vous-même la valeur du délai d'attente de façon explicite.

+0

Merci. Je m'en suis remis. Comme votre question, la valeur de délai d'attente TCP est calculée dynamiquement par le noyau. – hyman

Questions connexes