2010-08-20 6 views
2

Nous développons une application réseau multiplateforme qui doit envoyer et recevoir des données via TCP. Sur Linux, nous utilisons select() pour attendre à la fois envoyer et recevoir pour s'assurer que le socket est prêt. Cependant, sur OSX, la sélection pour la lecture prend un temps absurde pour revenir - plus de 20 secondes. select() n'est pas le moment de sortir - notre délai d'attente est de 60 secondes et les données reviennent, il est juste ridiculement lent. Cela arrive seulement pour les lectures, pas les envois. Le réseau semble être bon (encore une fois, la machine Linux sur le même réseau ne semble pas avoir les mêmes problèmes).l'appel système select() socket sur mac osx prend beaucoup de temps pour les lectures

Quelqu'un a-t-il connaissance d'avertissements utilisant la programmation de socket dans OSX?

+3

Avez-vous essayé d'utiliser tcpdump ou un outil similaire pour vérifier que les données arrivent à temps? Cela pourrait être un problème réseau et non un problème 'select()'. –

+1

wow, tu as raison! le serveur attend 30 secondes pour envoyer - mon mauvais. merci pour l'aide – wickedchicken

Répondre

1

Avez-vous essayé kqueue(2) sous OSX et epoll(7) sous Linux? Ce sont des interfaces beaucoup plus performantes et flexibles, bien que spécifiques à la plate-forme, pour la gestion des événements d'E/S. Vous pouvez également jeter un oeil à libevent qui résume tout cela pour vous.

+0

la question a été vraiment répondu par Daniel ci-dessus mais je marque cela comme une réponse parce que * aurait * été la réponse autrement. Merci. – wickedchicken

Questions connexes