Linux: est-il lire ou recv de socket par timeout?
Comment puis-je essayer de lire les données de prise par timeout?
Je sais, de sélectionner, de pselect, sondage, a un délai d'attente de champ, mais à l'aide de leur désactive l'option "tcp fast-path" dans tcp reno pile.
La seule idée que j'ai est d'utiliser recv(fd, ..., MSG_DONTWAIT) dans une boucle
- Il existe également une option de l'utilisation de threads 🙂 mais fil des signaux encore nécessaires
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le setsockopt fonction pour définir un délai d'expiration sur les opérations de réception:
Apparemment sur Windows, cela devrait être fait avant l'appel de
bind
. J'ai vérifier par l'expérience que cela peut être fait avant ou aprèsbind
sur Linux et OS X.struct timeval tv;
puis signifie select() ne fonctionnent pas trop? J'ai essayé le portage de mon select() code pour windows et il est juste délais d'attente immédiatement il ressemble à son en ignorant la valeur que je suis en train au timeval.Voici un code Simple pour ajouter du temps à votre fonction recv à l'aide de sondage dans C:
//fonctionne aussi après l'opération de liaison pour WINDOWS
Installer un gestionnaire pour
SIGALRM
, puis utilisezalarm()
ouualarm()
avant régulière de blocagerecv()
. Si l'alarme se déclenche, lerecv()
retournera un message d'erreur avecerrno
ensemble deEINTR
.LINUX
WINDOWS
NOTE: Vous avez mis ce paramètre avant de
bind()
appel de fonction pour la bonne exécution